Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XPath表达式在evaluator中运行良好,但在浏览器中不起作用_Javascript_Xml_Xpath - Fatal编程技术网

Javascript XPath表达式在evaluator中运行良好,但在浏览器中不起作用

Javascript XPath表达式在evaluator中运行良好,但在浏览器中不起作用,javascript,xml,xpath,Javascript,Xml,Xpath,我无法让浏览器的XPath计算器工作,这非常令人沮丧。我很确定这是一个名称空间问题,但我不确定我做错了什么 我有一本书。我想执行一个XPath查询,甚至是一个简单的查询-//teiHeader。这是一个有效的查询-返回带有teiHeader标记的所有元素。该文档包含一个这样的元素 解析XML文档后,我尝试对XPath表达式求值,如下所示: const resolver = doc.createNSResolver(doc.documentElement); const xpathResult =

我无法让浏览器的XPath计算器工作,这非常令人沮丧。我很确定这是一个名称空间问题,但我不确定我做错了什么

我有一本书。我想执行一个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

你可以看看这个问题。您将看到XPath计算没有返回任何元素,但是一个简单的
getElementsByTagName
成功。Chrome和Firefox的行为方式相同


这里缺少什么?

用作源XML的TEI文档只包含一个没有前缀的默认名称空间。但在XPath1.0中,必须为要使用的每个名称空间指定前缀。XPath
//teiHeader
将只选择没有名称空间的
元素

如果要使用
Document.evaluate()
检索
teiHeader
元素,可以改用此XPath:

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

所以基本上,基于web的evaluator是造成我困惑的原因,我认为这是一个有效的XPath。你的XPath是有效的,它在XPath1.0中的含义与XPath2.0中的含义略有不同。这种差异确实很容易被忽视。另见