Javascript Greasemonkey:XPath不会为.xhtml页面返回任何结果

Javascript Greasemonkey:XPath不会为.xhtml页面返回任何结果,javascript,xhtml,xpath,greasemonkey,Javascript,Xhtml,Xpath,Greasemonkey,在xhtml页面上运行时,xpath似乎不会返回任何结果 var result = document.evaluate( "//a/img", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); 例如,返回一个空的结果集。这里的问题是什么?如何解决它?xhtml元素不在空名称空间中,因此您必须向方法传递一个: function resolver(prefix) { return prefix ===

在xhtml页面上运行时,xpath似乎不会返回任何结果

var result = document.evaluate( "//a/img", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );

例如,返回一个空的结果集。这里的问题是什么?如何解决它?

xhtml元素不在空名称空间中,因此您必须向方法传递一个:

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