XPath表达式在评估程序中运行良好,但在浏览器中却无法运行

时间:2019-06-26 21:06:11

标签: javascript xml xpath

我无法使浏览器的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的行为相同。

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

用作源XML的TEI文档仅包含没有前缀的默认名称空间。但是在XPath 1.0中,必须为要使用的每个名称空间指定一个前缀。 XPath //teiHeader只会在没有名称空间的情况下选择<teiHeader>元素。

如果您想使用teiHeader来检索Document.evaluate()元素,则可以改用以下XPath:

const xpath = "//*[local-name() = 'teiHeader']"

Fiddle