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>
Zanoni
la source

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.

48klocs
la source
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

erik
la source
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

phil
la source