Rappels
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
Syntaxe : Pas de localisation
Syntaxe : Axes et têtes de noeud
/ : 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")
Exemple : Prédicats
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
Exemple : Union
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])
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 égaux
et elem1[@att1=current()/@att2] : Les elem1 qui ont un attribut att1 égal à l'attribut att2 du nœud courant