XPath: Comment sélectionner des nœuds qui n'ont pas d'attributs?


94

En utilisant XPath, comment sélectionner des nœuds qui n'ont aucun attribut (où l'attribut count = 0)?

Par exemple:

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

Réponses:


153
//node[not(@*)]

C'est le XPath pour sélectionner tous les nœuds nommés "nœud" dans le document sans aucun attribut.


1
C'est bien, mais on trouve encore <node class=""></node>tout ce qu'on peut y faire?
Marek

1
@MarekCzaplicki voir la réponse ci-dessous pour résoudre ce cas. stackoverflow.com/questions/1323755/…
phil

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

Sélectionne tous les <nœuds> avec zéro attribut


9

Pour répondre au commentaire de Marek Czaplicki et développer la réponse

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

.... sélectionnera tous les éléments de nœud avec zéro attribut OU qui ont des attributs qui sont tous vides. S'il s'agissait simplement d'un attribut particulier qui vous intéresse, plutôt que de tous, vous pouvez utiliser

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

... et cela sélectionnerait tous les éléments de nœud qui n'ont pas non plus d'attribut appelé attribute1OR et qui ont un attribute1attribut vide.

Autrement dit, les éléments suivants seraient sélectionnés par l'une ou l'autre de ces expressions xpath

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

Voir l'exemple jsfiddle ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.