Syntaxe XPath
Définition : Pas de localisation
Une expression XPath est composée de plusieurs pas de localisation successifs séparés par des /
.
Un pas de localisation est caractérisé par :
un axe,
un test de nœud,
un prédicat (éventuellement aucun ou plusieurs).
Syntaxe : Expression XPath
pas-de-localisation-1/.../pas-de-localisation-N
Syntaxe : Pas de localisation
axe::test-de-nœud[prédicat]
Syntaxe : Axes et tests de nœuds
/
: sélectionne la racine (expression absolue).
: sélectionne le nœud courant (expression relative)child::x
oux
ou./x
: sélectionne les éléments fils "x"child::x/child::y
ou./x/y
oux/y
: sélectionne les éléments y fils de l'élément fils x (petits fils)attribute::a
ou./@a
ou@a
: sélectionne l'attribut "a" du nœud courantchild::*
ou./*
ou*
: sélectionne tous les éléments filsattribute::*
ou./*@
ou*@
: sélectionne tous les attributschild::text()
ou./text()
outext()
: sélectionne les nœuds de type texteparent::x
ou../x
: sélectionne le père "x" (ancestor::x
sélectionne les ancêtres "x")descendant::x
ou.//x
: sélectionne tous les descendants "x" (enfants, petits enfants, etc.)preceding::x
,following::x
: sélectionne les nœuds précédents ou suivants dans le document (ordre), à l'exclusion des ancêtres (et des attributs)preceding-sibling::x
,following-sibling::x
: similaire àpreceding
etfollowing
, mais pour les nœuds de même niveau uniquement ("fratrie")
Attention : * , @*, text()
*
sélectionne les nœuds de type élément, mais pas les attributs (sélectionnés par @*
), ni les nœuds de type texte sélectionnés par text()
.
Complément : Axes
Pour bien visualiser le fonctionnement des axes, voir XML : Cours et exercices[1], p.124 (Figures 5-1 et 5-2).
Carré rouge : Le point de départ
Carré gris numéroté : Nœud sélectionné (avec son ordre de sélection)
Carré gris non numéroté ; Nœud non sélectionné
Exemple : Prédicats
x[1]
,x[2]
, etc. : sélectionne le premier x, le second x, etc.x[last()]
: sélectionne le dernier xx[@a='valeur']
: sélectionne les x tels que leur attribut a est égal à "valeur"x[y=1]
: sélectionne les x tels qu'ils ont un élément fils y égal à 1x[@a='v1' and @b='v2']
: sélectionne tous les x tels que leurs attributs a et b sont respectivement égaux à v1 et v2x[y or z]
: sélectionne tous les x tels qu'ils possède un élément fils y ou z
Exemple : Union
Il est possible d'unifier deux expressions XPath en utilisant |
:
x | y
: sélectionne les éléments x et les éléments yx[y] | x[z]
: sélectionne les éléments x tels qu'ils contiennent un y ou un z (équivalent ici àx[y or z]
)
Complément : current()
La fonction current()
permet de renvoyer le nœud courant dans le contexte d'une exécution XSLT.
Cela permet de différencier :
elem1[@att1=@att2]
: Les elem1 qui ont deux attributs att1 et att2 égauxet
elem1[@att1=current()/@att2]
: Les elem1 qui ont un attribut att1 égal à l'attribut att2 du nœud courant