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).
pas-de-localisation-1/.../pas-de-localisation-N
axe::test-de-nœud[prédicat]
/
: sélectionne la racine (expression absolue)
.
: sélectionne le nœud courant (expression relative)
child::x
ou x
ou ./x
: sélectionne les éléments fils "x"
child::x/child::y
ou ./x/y
ou x/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 courant
child::*
ou ./*
ou *
: sélectionne tous les éléments fils
attribute::*
ou ./*@
ou *@
: sélectionne tous les attributs
child::text()
ou ./text()
ou text()
: sélectionne les nœuds de type texte
parent::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
et following
, mais pour les nœuds de même niveau uniquement ("fratrie")
*
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()
.
x[1]
, x[2]
, etc. : sélectionne le premier x, le second x, etc.
x[last()]
: sélectionne le dernier x
x[@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 à 1
x[@a='v1' and @b='v2']
: sélectionne tous les x tels que leurs attributs a et b sont respectivement égaux à v1 et v2
x[y or z]
: sélectionne tous les x tels qu'ils possède un élément fils y ou z
Il est possible d'unifier deux expressions XPath en utilisant |
:
x | y
: sélectionne les éléments x et les éléments y
x[y] | x[z]
: sélectionne les éléments x tels qu'ils contiennent un y ou un z (équivalent ici à x[y or z]
)
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 égaux
et elem1[@att1=current()/@att2]
: Les elem1 qui ont un attribut att1 égal à l'attribut att2 du nœud courant