第一个 XPath 选择文档根(.
是当前上下文)。
第二个为空,因为没有body
在根上下文中。你可以使用:
/html/body
or
//body
这将为您提供节点。从那里,您可以使用上下文 XPath 表达式或 DOM 方法和属性获取上下文中的子节点。要查看节点名称,您可以使用nodeName
您选择的节点上的属性:
doc.evaluate(".", doc, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null)
.singleNodeValue.nodeName;
doc.evaluate("//body", doc, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null)
.singleNodeValue.nodeName;
JSFiddle 1 http://jsfiddle.net/helderdarocha/C6c7d/
此替代版本使用 DOM 来创建节点。
var head = document.createElement("head");
var body = document.createElement("body");
doc.documentElement.appendChild(head);
doc.documentElement.appendChild(body);
它还强制执行名称空间(在第一个示例中,Chrome 中会忽略该名称空间),因此 XPath 表达式需要包含名称空间映射函数(作为evaluate
方法,或忽略它们(使用通配符和本地名称测试,如下例所示)。
doc.evaluate(".//*[local-name()='body']", doc.documentElement, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue.nodeName
请注意,我还使用了doc.documentElement
作为上下文节点。
在浏览器中尝试一下:
JSFiddle 2 http://jsfiddle.net/helderdarocha/pSj78/