Opérateurs et caractères spéciaux
Les expressions XPath se construisent à l'aide des opérateurs et caractères spéciaux indiqués dans le tableau suivant.
|
Opérateur enfant ; sélectionne les enfants immédiats de la collection du côté gauche. Lorsque cet opérateur de chemin apparaît au début du modèle, il indique que les enfants doivent être sélectionnés dans le nœud racine. |
|
Descendant récursif ; cherche l'élément spécifié à n'importe quelle profondeur. Lorsque cet opérateur de chemin apparaît au début du modèle, il indique un jambage descendant récursif à partir du nœud racine. |
|
Indique le contexte actuel. |
|
Le parent du nœud de contexte actuel. |
|
Caractère générique ; sélectionne tous les éléments quel que soit leur nom. |
|
Attribut ; préfixe d'un nom d'attribut. |
|
Caractère générique d'attribut ; sélectionne tous les attributs quel que soit leur nom. |
|
Séparateur d'espace de noms ; sépare le préfixe d'espace de noms du nom de l'élément ou de l'attribut. |
|
Regroupe les opérations pour établir de manière explicite leur ordre de priorité. |
|
Applique un modèle de filtre. |
|
Opérateur d'indice ; utilisé pour l'indexation au sein d'une collection. |
|
Effectue une addition. |
|
Effectue une soustraction. |
|
Effectue une division à virgule flottante selon IEEE 754. |
|
Effectue une multiplication. |
|
Retourne le reste d'une division tronquée. |
Ce tableau n'inclut pas les opérateurs booléens et ensemblistes, lesquels sont énumérés dans Expressions booléennes, de comparaison et ensemblistes ou Opérations ensemblistes.
Le tableau suivant indique l'ordre des priorités (de la plus haute à la plus faible priorité).
Priorité | Caractère | But |
---|---|---|
1 |
|
Regroupement |
2 |
|
Filtres |
3 |
|
Opérations de chemin |
L'opérateur de groupe, ()
, s'applique uniquement à l'expression de chemin de niveau supérieur. Par exemple, (//author/degree | //author/name)
est une opération de regroupement valide, mais //author/(degree | name)
ne l'est pas.
Les opérateurs de modèle de filtre ([]
) ont une priorité supérieure à celle des opérateurs de chemin (/
et //
). Par exemple, l'expression //comment()[3]
sélectionne tous les commentaires d'index 3 relatif au parent du commentaire partout dans le document. Elle diffère de l'expression (//comment())[3]
, qui sélectionne le troisième commentaire dans l'ensemble de tous les commentaires relatif au parent. La première expression peut retourner plusieurs commentaires, tandis que la dernière ne peut en retourner qu'un.
Ces opérateurs et caractères spéciaux sont décrits dans le détail dans cette référence.
Opérateurs de chemin
La collection d'éléments d'un certain type peut être déterminée à l'aide des opérateurs de chemin (/
et //
). Ces opérateurs prennent comme arguments une collection « côté gauche » sur laquelle porte la sélection et une collection « côté droit » indiquant quels éléments sélectionner. L'opérateur enfant (/
) sélectionne parmi les enfants immédiats de la collection de gauche, tandis que l'opérateur descendant (//
) sélectionne parmi des descendants arbitraires de la collection de gauche. En fait, //
peut être considéré comme un substitut pour un ou plusieurs niveaux de hiérarchie.
Notez que les opérateurs de chemin changent le contexte lorsque la requête est exécutée. En enchaînant des opérateurs de chemin, il est possible de traverser l'arborescence des documents.
Exemples
Expression | Référence |
---|---|
|
Tous les éléments |
|
Tous les éléments |
|
Tous les éléments |
|
Tous les éléments |
|
Tous les éléments |
Caractère générique
Il est possible de référencer un élément sans utiliser son nom en lui substituant la collection générique (*
). La collection *
fait référence à tous les éléments qui sont des enfants du contexte actuel, quel que soit le nom de balise.
Exemples
Expression | Référence |
---|---|
|
Tous les éléments enfants d'éléments |
|
Tous les éléments |
|
Tous les éléments petits-enfants du contexte actuel. |
|
L'élément |
|
Tous les éléments de l'espace de noms |
Notez que le modèle *:book
n'est pas pris en charge.
Attributs
XPath désigne les noms d'attribut par le symbole @
. Les attributs et éléments enfants sont traités de manière impartiale et les capacités sont équivalentes entre les deux types autant que possible.
Remarque : |
---|
Les attributs ne pouvant pas contenir d'éléments enfants, des erreurs de syntaxe se produisent lorsque des opérateurs de chemin leur sont appliqués.En outre, vous ne pouvez pas appliquer un index aux attributs car, par définition, aucun ordre n'est défini pour les attributs. |
Exemples
Expression | Référence |
---|---|
|
L'attribut |
|
L'attribut |
|
L'attribut |
Notez que l'exemple suivant n'est pas valide, car un attribut ne peut pas avoir d'enfants.
price/@exchange/total
Recherche de plusieurs attributs
Tous les attributs d'un élément peuvent être retournés à l'aide du préfixe @*
. Cela peut être utile pour des applications qui traitent les attributs comme des champs d'un enregistrement.
Exemples
Expression | Référence |
---|---|
|
Tous les attributs du nœud de contexte actuel. |
|
Tous les attributs de l'espace de noms |
Notez que le modèle @*:title
n'est pas pris en charge.
Voir aussi
Référence
Concepts
Opérations ensemblistes
Exemple de fichier XML pour la syntaxe XPath (inventory.xml)