XPath: Como selecionar nós que não possuem atributos?


94

Usando XPath, como selecionar nós que não têm atributos (onde contagem de atributo = 0)?

Por exemplo:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>

Respostas:


153
//node[not(@*)]

Esse é o XPath para selecionar todos os nós denominados "nó" no documento sem quaisquer atributos.


1
Isso é bom, mas ainda encontra <node class=""></node>algo que podemos fazer sobre isso?
Marek de

1
@MarekCzaplicki veja a resposta abaixo para resolver este caso. stackoverflow.com/questions/1323755/…
phil

23
//node[count(@*)=0]

Selecionará todos os <nó> com zero atributos


9

Para abordar o comentário de Marek Czaplicki e expandir a resposta

//node[not(@*) or not(string-length(@*))]

.... selecionará todos os elementos do nó com zero atributos OU que possuem atributos que estão todos vazios. Se fosse apenas um atributo específico de seu interesse, em vez de todos eles, você poderia usar

//node[not(@attribute1) or not(string-length(@attribute1))]

... e isso selecionaria todos os elementos do nó que não têm um atributo chamado attribute1OR que tem um attribute1atributo vazio.

Ou seja, os seguintes elementos seriam selecionados por qualquer uma dessas expressões xpath

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1=""></node> <!--This one -->
    <node attribute1="bbbb"></node>
    <node></node> <!--...and this one -->
</nodes>

Veja o exemplo de jsfiddle aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.