XPath - Prédicats

Principes
Nous venons de voir, à partir d'un noeud contexte donné, comment sélectionner les noeuds qui doivent composer le nodeset résultat. Il est possible d'ajouter à chaque partie du chemin de localisation une ou plusieurs conditions afin d'augmenter le pouvoir discriminant de l'expression XPath.
Ces conditions permettent de filtrer, parmi les noeuds composant un nodeset intermédiaire, seulement ceux répondant à certains critères.
Nous pouvons vouloir sélectionner, par exemple, seulement les sections de niveau 2 (test sur les attributs des éléments), ou seulement les premières sections de chaque chapitre (test sur les propriétés d'un nodeset).

Syntaxe
Nous avons vu que la syntaxe d'un chemin de localisation était la suivante :
axe1::nodeTest1/axe2::nodeTest2/ ... /axen::nodeTestn
Chaque partie d'un tel chemin de localisation peut être agrémenté d'un ou plusieurs prédicats :
axei::nodeTesti[prédicat1]...[prédicatn]
L'écriture suivante est équivalente :
axei::nodeTesti[prédicat1 and ... and prédicatn]

Types, opérateurs et fonctions
Nous avons parlé jusqu'ici uniquement de nodesets. XPath connaît également les types booléen, nombre (réel) et chaîne de caractères. À chaque type est associé un ensemble d'opérateurs et de fonctions.

Type Opérateur/Fonction Signification
Réels - Opposé (opérateur unaire)
+, - Addition et soustraction
mod Reste de division entière
div Quotient de division entière
=, != Égalité, différence
<, >, <=, >= Comparaison
floor(), ceiling(), round(), sum() Voir la doc (attention aux conversions !!!)
Booléens true(), false() Fonctions qui renvoient true et false (!)
and, or et, ou logiques
not() négation logique
Chaînes de caractères contains (str1, str2) Renvoie vrai si la chaîne str1 contient la chaîne str2
starts-with (str1, str2) Renvoie vrai si la chaîne str1 commence par la chaîne str2
concat(str1, str2, ..., strn) Renvoie la concaténation des ses arguments (au moins deux)
substring-before(str1, str2) Renvoie la partie de str1 située avant la première occurrence de la sous-chaîne str2 (ou la chaîne vide si str2 est absente)
substring-after(str1, str2) Renvoie la partie de str1 située après la première occurrence de la sous-chaîne str2 (ou la chaîne vide si str2 est absente)
substring (str, n) Renvoie la sous-chaîne de str commençant à l'indice n
substring (str, n, lg) Renvoie la sous-chaîne de str commençant à l'indice n et de longueur lg.
string-length (str) Renvoie la longueur de la chaîne str. Si str est omise, renvoie la longueur de la valeur textuelle du noeud contexte.
translate (str1, str2, str3) Renvoie la chaîne str1 dans laquelle toutes les occurrences de str2 ont été remplacées par une occurrence de str3.
normalize-space (str) Renvoie la chaîne str dans laquelle les espaces de début et de fin ont été supprimés et où les séquences de blancs (espaces, tabulations, retour-charriots) ont été remplacées par un espace unique.
Précédent... ] Sommaire... ] Suivant... ]