【问题标题】:Cannot Execute Javascript XPath queries on created document无法对创建的文档执行 Javascript XPath 查询
【发布时间】:2011-12-01 03:48:39
【问题描述】:

问题

我正在使用 javascript 创建一个文档,我想对该文档执行 XPath 查询。

  • 我在 safari/chrome 中试过这个
  • 我已经阅读了关于 createDocument / xpath 搜索的内容,看起来这段代码应该可以工作
  • 目前看来它可能是一个 webkit 错误

我的要求:

  • 我可以使用 innerHTML() 来设置文档
  • 我可以使用标记名执行 xpath 搜索

代码:

如果您将以下内容复制/粘贴到 webkit 检查器中,您应该能够重新制作。

function search(query, root) {  
  var result = null;
  result = document.evaluate(query, root, null, 7,null);

  var nodes = [];
  var node_count = result.snapshotLength;

  for(var i = 0; i < node_count; i++) {
    nodes.push(result.snapshotItem(i));
  }

  return nodes;
}

x = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', 'HTML');  

body = x.createElement('body');
body.innerHTML = "<span class='mything'><a></a></span>";

xdoc = x.documentElement; //html tag
xdoc.appendChild(body);

console.log(search(".", xdoc));     // --> [<html>​…​</html>​]
console.log(search("/*", xdoc));    // --> [<html>​…​</html>​]
console.log(search("/html", xdoc)); // --> []

最佳猜测

所以我绝对可以使用 XPath 进行搜索,但我无法使用标记名进行搜索。命名空间有什么愚蠢的地方吗?

【问题讨论】:

  • 为什么将7 传递给结果类型参数而不是0?你看过developer.mozilla.org/en/…
  • 您在 JavaScript 中创建的文档似乎存在问题(或错误)。如果你在普通文档(比如这个页面)上执行相同的功能,它就可以正常工作。

标签: javascript xpath xhtml document


【解决方案1】:

你试过了吗:

console.log(search("//html", xdoc));

我对 Safari 并不特别熟悉,但问题可能是 Safari 在 HTML 或其他内容之上添加了另一个节点。如果是这种情况,前两个查询可能会向您显示该节点及其子节点,这会使它们看起来工作正常,而第三个查询将失败,因为不会有 root=>HTML 节点.

只是一个想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2012-08-02
    相关资源
    最近更新 更多