【发布时间】: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