Partager via


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.

div

Effectue une division à virgule flottante selon IEEE 754.

*

Effectue une multiplication.

mod

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

author/first-name

Tous les éléments <first-name> avec un élément <author> du nœud de contexte actuel.

bookstore//title

Tous les éléments <title> à un ou plusieurs niveaux de profondeur dans l'élément <bookstore> (descendants arbitraires). Notez que cette expression diffère du modèle suivant : bookstore/*/title.

bookstore/*/title

Tous les éléments <title> qui sont des petits-enfants d'éléments <bookstore>.

bookstore//book/excerpt//emph

Tous les éléments <emph> situés n'importe où à l'intérieur d'enfants <excerpt> d'éléments <book>, n'importe où à l'intérieur de l'élément <bookstore> :

.//title

Tous les éléments <title> à un ou plusieurs niveaux de profondeur dans le contexte actuel. Notez que cette situation est essentiellement la seule où la notation à points est requise.

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

author/*

Tous les éléments enfants d'éléments <author>.

book/*/last-name

Tous les éléments <last–name> qui sont des petits-enfants d'éléments <book>.

*/*

Tous les éléments petits-enfants du contexte actuel.

my:book

L'élément <book> de l'espace de noms my.

my:*

Tous les éléments de l'espace de noms my.

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.

ms256122.note(fr-fr,VS.100).gifRemarque :
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

@style

L'attribut style du contexte d'élément actuel.

price/@exchange

L'attribut exchange d'éléments <price> dans le contexte actuel.

book/@style

L'attribut style de tous les éléments <book> .

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.

@my:*

Tous les attributs de l'espace de noms my. Cela ne comprend pas les attributs non qualifiés d'éléments de l'espace de noms my.

Notez que le modèle @*:title n'est pas pris en charge.

Voir aussi

Référence

Exemples de XPath

Concepts

Opérations ensemblistes
Exemple de fichier XML pour la syntaxe XPath (inventory.xml)