提问人:NALL 提问时间:8/22/2023 更新时间:8/22/2023 访问量:22
使用 JS 进行 XML 解析 - 区分 2 个同名但父级不同的元素
xml parsing with js - differentiating 2 elements with same name but different parent
问:
如果有 2 个同名但种类不同的元素,我们如何应用这个 xml 解析器示例? 例:
<Dbtr>
<Nm>Debtor</Nm>
</Dbtr>
<Cdtr>
<Nm>Creditor</Nm>
</Cdtr>
如何区分这两个名字?
答:
0赞
VLAZ
8/22/2023
#1
解析 XML1 后,选择器可以根据节点的父节点:
使用选择器
const xml = `
<root>
<Dbtr>
<Nm>Debtor</Nm>
</Dbtr>
<Cdtr>
<Nm>Creditor</Nm>
</Cdtr>
</root>
`;
const doc = new DOMParser().parseFromString(xml, "application/xml");
const debitor = doc.querySelector("Dbtr > Nm").textContent;
const creditor = doc.querySelector("Cdtr > Nm").textContent;
console.log(debitor);
console.log(creditor);
查看更多:
使用 XPath
或者,XPath 可以以相同的方式使用:
const xml = `
<root>
<Dbtr>
<Nm>Debtor</Nm>
</Dbtr>
<Cdtr>
<Nm>Creditor</Nm>
</Cdtr>
</root>
`;
const doc = new DOMParser().parseFromString(xml, "application/xml");
const debitorNode = doc.evaluate(
"//Dbtr/Nm",
doc,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue;
const creditorNode = doc.evaluate(
"//Cdtr/Nm",
doc,
null,
XPathResult.FIRST_ORDERED_NODE_TYPE,
null
).singleNodeValue
const debitor = debitorNode.textContent;
const creditor = creditorNode.textContent;
console.log(debitor);
console.log(creditor);
查看更多:
1注意:XML 文档需要有一个顶级节点。
评论
0赞
NALL
8/22/2023
嗨,VLAZ。多谢。第一种选择似乎更容易。使用一个而不是另一个有什么优势吗?
0赞
VLAZ
8/22/2023
@NALL,您可以将 XPath 与它一起使用。因此,如果您有一些准备好的 XPath 代码片段,则可以运行它们。此外,还允许使用一些略有不同的方法来遍历 DOM,这些方法可能不适用于选择器。除此之外,它还允许对结果进行一些更复杂的处理。综上所述,在这种情况下,这可能是矫枉过正。这是一个有用的工具,所以我只是展示它的存在。我个人只会坚持使用选择器来做这样简单的事情。
评论
<Nm>