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>
//node[not(@*)]
C'est le XPath pour sélectionner tous les nœuds nommés "nœud" dans le document sans aucun attribut.
//node[count(@*)=0]
Sélectionne tous les <noeud> avec zéro attribut
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