XPath: come selezionare i nodi che non hanno attributi?


94

Utilizzando XPath, come selezionare i nodi che non hanno attributi (dove conteggio attributi = 0)?

Per esempio:

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

Risposte:


153
//node[not(@*)]

Questo è l'XPath per selezionare tutti i nodi denominati "nodo" nel documento senza attributi.


1
Questo è carino, ma trova ancora <node class=""></node>qualcosa che possiamo fare al riguardo?
Marek

1
@MarekCzaplicki vedi la risposta sotto per affrontare questo caso. stackoverflow.com/questions/1323755/…
phil

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

Selezionerà tutti i <nodi> con zero attributi


9

Per rispondere al commento di Marek Czaplicki ed espandere la risposta

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

.... selezionerà tutti gli elementi del nodo con zero attributi O che hanno attributi che sono tutti vuoti. Se fosse solo un particolare attributo che ti interessa, piuttosto che tutti loro, allora potresti usare

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

... e questo selezionerebbe tutti gli elementi del nodo che non hanno un attributo chiamato attribute1OR che hanno un attribute1attributo vuoto.

Cioè, i seguenti elementi verrebbero selezionati da una di queste espressioni xpath

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

Vedi l'esempio di jsfiddle qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.