Greasemonkey: XPath ne renvoie aucun résultat pour la page .xhtml
-
19-08-2019 - |
Question
Lors de son exécution sur une page xhtml, xpath ne semble pas renvoyer de résultats.
var result = document.evaluate( "//a/img", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
Par exemple, retourne un jeu de résultats vide. Quel est le problème ici et comment puis-je le résoudre?
La solution
Les éléments
xhtml n'étant pas dans un espace de noms null, vous devez donc passer un namespace reserver} à la méthode:
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 );
Autres conseils
Ok avec cette solution, mais j'utilise maintenant les précédents frères et sœurs dans xpathExpression, j'essaie avec cela:
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];
}
et ensuite:
document.evaluate('//h:' + node.tagName + '/preceding-sibling::' + node.tagName, node, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength
qui renvoie toujours 0 avec xhtml.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow