我正在尝试此XPath查询,但它返回一个空的枚举 . 有人熟悉这个问题吗?关于加载AJAX的XML的其他XPath查询工作正常 . 文件是XHTML1.1我怀疑xhtml命名空间(xmlns =“http://www.w3.org/1999/xhtml”)
始终显示0 .
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<table id="tbl">
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>7</td><td>8</td><td>9</td></tr>
</table>
</body>
<script>
//ORIGINAL: var result = document.evaluate('table#tbl/tr/td[3]/text()', document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
var result = document.evaluate('//body', document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
var node;
var c = 0;
while (node = result.iterateNext()) c++;
alert(c); // Always 0??? Why?
</script>
</html>
2 回答
如果您的
<html>
在命名空间中,则您运行的查询实际上是针对空命名空间运行的 .document.evaluate
中的第三个参数指的是namespaceResolver
,它根据它们的名称空间前缀[1]执行它在tin-resolves命名空间上所说的内容 .现在,您可以拥有动态文件,也可以创建自己的文档,具体取决于您使用的文档是您自己的文档还是可以更改的文档 .
假设名称空间前缀为空(看起来像是大部分时间),你想用
nsResolver
替换null
,这样[3]:或者,请参阅动态示例,这可能会为您节省长期时间[2] .
参考文献
https://developer.mozilla.org/en/docs/Introduction_to_using_XPath_in_JavaScript
https://developer.mozilla.org/en/docs/Web/API/document.createNSResolver
https://developer.mozilla.org/en/docs/Introduction_to_using_XPath_in_JavaScript#Implementing_a_User_Defined_Namespace_Resolver
这是XHTML的完整修复 .