Greasemonkey: XPath non restituisce risultati per la pagina .xhtml
-
19-08-2019 - |
Domanda
Quando viene eseguito su una pagina xhtml, xpath non sembra restituire alcun risultato.
var result = document.evaluate( "//a/img", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
Ad esempio, restituisce un set di risultati vuoto. Qual è il problema qui e come posso risolverlo?
Soluzione
Gli elementi xhtml non si trovano nello spazio dei nomi null, quindi devi passare un al metodo:
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 );
Altri suggerimenti
Ok con questa soluzione, ma ora sto usando il fratello precedente in xpathExpression, provo con quello:
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];
}
e quindi:
document.evaluate('//h:' + node.tagName + '/preceding-sibling::' + node.tagName, node, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength
che restituiscono sempre 0 con xhtml.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow