greasemonkey : xpath는 .xhtml 페이지에 대한 결과가 없습니다
-
19-08-2019 - |
문제
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 );
다른 팁
이 솔루션으로는 OK이지만 이제는 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을 반환합니다.
제휴하지 않습니다 StackOverflow