Le titre de cette question est:
expression XPath pour sélectionner tous nœuds avec un attribut commun
ne porte toutefois nulle part le texte de la question de discuter comment trouver tho tous les nœuds qui ont un attribut commun - donc le titre peut être incorrect.
Pour trouver tous les nœuds qui ont un attribut commun nommé x
(BTW, seuls nœuds d'éléments peuvent avoir des attributs), utilisation:
//*[@x]
Utilisation:
//@x
pour sélectionner tous les attributs nommés x
dans le document XML. C'est probablement l'expression la plus courte pour le faire.
Il n'y a rien de mal à:
//*/@x
sauf qu'il est un peu plus longue.
Il est un raccourci pour:
/descendant-or-self::node()/child::*/attribute::x
et permet aussi de sélectionner tous les attributs x
dans le document XML.
Quelqu'un peut penser que cette expression ne sélectionne pas l'attribut x
de l'élément supérieur du document. Ceci est une conclusion erronée, parce que le premier emplacement étape:
/descendant-or-self::node()
sélectionne chaque nœud dans le document, y compris la racine elle-même (/
) .
Cela signifie que:
/descendant-or-self::node()/child::*
sélectionne tous les éléments, y compris l'élément supérieur (qui est le seul enfant du nœud racine dans un document XML bien formé).
Ainsi, lorsque le dernier emplacement étape /@x
est finalement ajouté, cela sélectionnera tous les x
attributs de tous les noeuds sélectionnés jusqu'à présent par les deux premières étapes de l'emplacement - qui est tous x
attributs de tous les nœuds d'éléments dans le fichier XML document.
Bonne question, +1.Voir ma réponse pour une petite correction de la déclaration de @ Alejandro que votre expression XPath est "fausse". @ La réponse d'Alejandro est bonne, sauf qu'il n'y a rien de mal avec cette expression XPath. –