我无法使浏览器的XPath评估器正常工作,这非常令人沮丧。我很确定这是一个名称空间问题,但是我不确定自己在做什么错。
我有一个XML document。我想执行一个XPath查询,甚至是一个简单的查询-//teiHeader
。这是一个有效的查询-返回带有teiHeader
标签的所有元素。该文档包含一个这样的元素。
一旦我解析了XML文档,我就尝试像这样评估XPath表达式:
const resolver = doc.createNSResolver(doc.documentElement);
const xpathResult = doc.evaluate(xpath, doc, resolver);
let node = xpathResult.iterateNext();
while(node) {
console.log(node);
node = xpathResult.iterateNext();
}
结果是没有节点,对iterateNext
的第一次调用将返回null。
您可以查看展示此问题的fiddle。您会看到XPath评估未返回任何元素,但是简单的getElementsByTagName
成功了。 Chrome和Firefox的行为相同。
我在这里想念什么?
答案 0 :(得分:1)
用作源XML的TEI文档仅包含没有前缀的默认名称空间。但是在XPath 1.0中,必须为要使用的每个名称空间指定一个前缀。 XPath //teiHeader
只会在没有名称空间的情况下选择<teiHeader>
元素。
如果您想使用teiHeader
来检索Document.evaluate()
元素,则可以改用以下XPath:
const xpath = "//*[local-name() = 'teiHeader']"