Greasemonkey: XPath lieferte keine Ergebnisse für .xhtml Seite
-
19-08-2019 - |
Frage
Wenn auf einer XHTML-Seite ausgeführt wird, XPath scheint keine Ergebnisse zurück.
var result = document.evaluate( "//a/img", document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
Zum Beispiel gibt eine leere Ergebnismenge. Was ist das Problem hier, und wie kann ich das Problem beheben?
Lösung
XHTML-Elemente sind nicht in leeren Namensraum, so müssen Sie passieren einen Namespace Resolver die Methode:
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 );
Andere Tipps
Ok mit dieser Lösung, aber ich bin jetzt preceding-Geschwister in der XPathExpression verwenden, ich versuche mit, dass:
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];
}
und dann:
document.evaluate('//h:' + node.tagName + '/preceding-sibling::' + node.tagName, node, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength
, die Rückkehr immer 0 mit xhtml.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow