首页 文章

XPath不会从文档返回结果

提问于
浏览
1

我正在尝试此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 回答

  • 0

    如果您的 <html> 在命名空间中,则您运行的查询实际上是针对空命名空间运行的 .

    document.evaluate 中的第三个参数指的是 namespaceResolver ,它根据它们的名称空间前缀[1]执行它在tin-resolves命名空间上所说的内容 .

    现在,您可以拥有动态文件,也可以创建自己的文档,具体取决于您使用的文档是您自己的文档还是可以更改的文档 .

    假设名称空间前缀为空(看起来像是大部分时间),你想用 nsResolver 替换 null ,这样[3]:

    function nsResolver(prefix) {
      var ns = {
        '' : 'http://www.w3.org/1999/xhtml'
      };
      return ns[prefix] || null;
    }
    

    或者,请参阅动态示例,这可能会为您节省长期时间[2] .

    参考文献

  • 3

    这是XHTML的完整修复 .

    <?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>
    var f = function(prefix) {alert(prefix);
      var ns = {'h' : 'http://www.w3.org/1999/xhtml'};
      return ns[prefix] || null;
    };
    var result = document.evaluate('//h:table[@id="tbl"]/h:tr/h:td[3]/text()', document, f, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
    var node;
    while (node = result.iterateNext()) alert(node.nodeName);
    </script>
    </html>
    

相关问题