Opérateurs XPath

Tous les opérateurs définis par XPath sont répertoriés ci-dessous.

Opérateurs mathématiques  
 
+ (plus)
Additionne deux nombres

- (moins)
Soustrait deux nombres

* (multiplication)
Multiplie deux nombres

div
Exécute une division à virgule flottante entre deux nombres

mod
Renvoie le reste à virgule flottante de la division des deux nombres

Opérateurs booléens  
 
=
Teste si deux expressions sont égales.

<
Teste si la première expression est inférieure à la seconde. Dans un attribut, cet opérateur doit être codé & lt;.

< =
Teste si la première expression est inférieure ou égale à la seconde. Dans un attribut, cet opérateur doit être codé & lt;=.

>
Teste si la première expression est supérieure à la seconde. Dans un attribut, cet opérateur doit être codé & gt;.

> =
Teste si la première expression est supérieure ou égale à la seconde. Dans un attribut, cet opérateur doit être codé & gt;.

!=
Teste si les deux expressions ne sont pas égales.

and
Teste si les deux expressions sont true. Si la première expression est false, la seconde n'est pas évaluée.

or
Teste si l'une des deux expressions est true. Si la première expression est true, la seconde n'est pas évaluée.

Comparaison de valeurs de différents types de données

Pour les six premiers opérateurs booléens, la comparaison de valeurs de différents types de données est complexe. Les différentes possibilités sont expliquées ci-dessous :

Si les deux objets sont des valeurs booléennes
Elles sont donc égales si elles ont la même valeur. Pour les comparaisons inférieur à et supérieur à, la valeur false est considérée comme inférieure à la valeur true (l'appel de la fonction number(false()) renvoie la valeur 0, alors que la fonction number(true()) renvoie la valeur 1).

Si les deux objets sont des nombres
Le fonctionnement des opérateurs correspond exactement à celui attendu.

Si les deux objets sont des chaînes
Elles sont donc égales si leurs caractères Unicode sont identiques. Pour les comparaisons inférieur à et supérieur à, les codes des caractères sont comparés.

Si aucun des deux objets n'est un ensemble de nœuds et que l'opérateur est = ou !=
Les deux objets sont alors convertis en le même type d'objet, et le fonctionnement de la comparaison est similaire à celui décrit précédemment. Si l'un des objets est une valeur booléenne, les objets sont alors convertis en valeurs booléennes comme si la fonction boolean() avait été appelée. Si aucun des deux objets n'est une valeur booléenne, les objets sont alors convertis en nombre. Si l'un des objets est un nombre, les objets sont alors convertis en valeurs numériques comme si la fonction number() avait été appelée. Sinon, tous les objets sont convertis en chaînes comme si la fonction string() avait été appelée.

Si aucun des deux objets ne représente un ensemble de nœuds et que l'opérateur est < , > , ou > =
Les objets sont alors convertis en nombres puis comparés.

Si l'un des objets ou les deux représente un ensemble de nœuds
Tout se complique alors. Si les deux objets représentent un ensemble de nœuds, une comparaison est vraie lorsque la valeur de chaîne d'au moins un nœud du premier ensemble de nœuds est égale à la valeur de chaîne d'au moins un nœud du second ensemble de nœuds. Si l'un des objets est un ensemble de nœuds et l'autre un nombre, une chaîne ou une valeur booléenne, la comparaison est vraie lorsqu'il existe au moins un nœud de l'ensemble de nœuds dont le nombre, la chaîne ou la valeur booléenne est égal à ce nombre, cette chaîne ou cette valeur booléenne.

Opérateurs d'expression  
 
/
L'opérateur de séparation utilisé pour séparer des étapes dans un chemin d'emplacement. Si une expression XPath commence par le signe /, il s'agit du répertoire racine du document.

//
La syntaxe abrégée de l'axe descendant-or-self.

.
La syntaxe abrégée de l'axe self.

..
La syntaxe abrégée de l'axe parent.

@
La syntaxe abrégée de l'axe attribute.

|
L'opérateur d'union. Par exemple, l'attribut match dans l'élément < xsl:template match= " a|b " > correspond à tous les éléments < a > et < b >.

*
Un caractère de remplacement représentant tout nœud du type de nœud principal. child::* sélectionne tous les enfants de l'élément du nœud de contexte, attribute::* sélectionne tous les attributs du nœud de contexte, etc. Si vous utilisez la syntaxe abrégée, * sélectionne tous les enfants d'élément du nœud de contexte, et @* sélectionne tous les attributs du nœud de contexte. Compare l'opérateur de caractère de remplacement avec le test de nœud node(), correspondant à un nœud quelconque, indépendamment du type.

[]
L'opérateur de prédicat utilisé pour contenir une expression de prédicat filtrant un groupe de nœuds.

$
L'opérateur de variable utilisé pour indiquer qu'un symbole donné représente un nom de variable.