web-dev-qa-db-fra.com

XPath: Comment sélectionner des nœuds sans attributs?

En utilisant XPath, comment sélectionner des nœuds qui n'ont pas d'attributs (où nombre d'attributs = 0)?

Par exemple:

<nodes>
    <node attribute1="aaaa"></node>
    <node attribute1="bbbb"></node>
    <node></node> <- FIND THIS
</nodes>
84
Zanoni
//node[not(@*)]

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

137
48klocs
//node[count(@*)=0]

Sélectionne tous les <noeud> avec zéro attribut

22
erik

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 noeud avec des attributs nuls OR qui ont des attributs qui sont tous vides. Si ce n'était qu'un attribut particulier qui vous intéresse, plutôt que tous, alors vous pourrait utiliser

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

... et cela sélectionnerait tous les éléments de noeud qui n'ont pas non plus d'attribut appelé attribute1 OR qui ont un attribute1 attribut vide.

Autrement dit, les éléments suivants seraient sélectionnés par l'une 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

5
phil