在 xhtml 页面上运行时,xpath 似乎没有返回任何结果。
var result = document.evaluate( "//a/img", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
例如返回一个空的结果集。这里有什么问题,我该如何解决?
在 xhtml 页面上运行时,xpath 似乎没有返回任何结果。
var result = document.evaluate( "//a/img", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
例如返回一个空的结果集。这里有什么问题,我该如何解决?
xhtml 元素不在 null 命名空间中,因此您必须将命名空间解析器传递给该方法:
function resolver(prefix) {
return prefix === 'x' ? 'http://www.w3.org/1999/xhtml' : null;
}
var result = document.evaluate( "//x:a/x:img", document.body, resolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
可以使用此解决方案,但我现在在 xpathExpression 中使用前兄弟,我尝试使用:
function nsResolver(prefix){
var ns = {
'mathml' : 'http://www.w3.org/1998/Math/MathML', // for example's sake only
'h' : 'http://www.w3.org/1999/xhtml'
};
return ns[prefix];
}
进而 :
document.evaluate('//h:' + node.tagName + '/preceding-sibling::' + node.tagName, node, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength
使用 xhtml 总是返回 0。