Pergunta

Ao executar em uma página xhtml, xpath não parece nenhum resultado.

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

Por exemplo retorna um conjunto de resultados vazio. Qual é o problema aqui, e como faço para corrigir isso?

Foi útil?

Solução

elementos XHTML não estão no namespace nulo, então você tem que passar por um namespace resolver ao método:

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 );

Outras dicas

Ok com esta solução, mas eu estou usando agora precedendo-irmão na XPathExpression, eu tento com isso:

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, em seguida:

document.evaluate('//h:' + node.tagName + '/preceding-sibling::' + node.tagName, node, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength

que o retorno sempre 0 com xhtml.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top