Début de la définition formelle des chemins de localisation ....
[1] LocationPath::= RelativeLocationPath | AbsoluteLocationPath
[2] AbsoluteLocationPath ::= '/' RelativeLocationPath?
| AbbreviatedAbsoluteLocationPath
[3] RelativeLocationPath ::= Step | RelativeLocationPath '/' Step
| AbbreviatedRelativeLocationPath
[4] Step ::= AxisSpecifier NodeTestPredicate* | AbbreviatedStep
[5] AxisSpecifier ::= AxisName '::' | AbbreviatedAxisSpecifier
[6] AxisName ::= 'ancestor' | 'ancestor-or-self' | 'attribute' | 'child' | 'descendant' | 'descendant-or-self' | 'following' | 'following-sibling' | 'namespace' | 'parent' | 'preceding' | 'preceding-sibling' | 'self'
3.2 Quelques chemins de localisation avec la syntaxe courte
A. Quelques chemins simples: éléments enfants, parents, cousins
Noeud racine: /
retourne le premier noeud trouvé dans un arbre (pas forcément l'élément racine XML !)
Elément enfant direct:
nom_element_XML
Elément enfant direct du noeud racine:
/nom_element_XML
Enfant d'un enfant:
nom_element_XML/nom_element_XML
Descendant arbitraire du noeud racine:
//nom_element_XML
Descendant arbitraire d'un noeud:
nom_element_XML//nom_element_XML
Un parent d'un noeud:
../
Un cousin lointain d'un noeud:
../../nom_element_XML/nom_element_XML/nom_element_XML
Illustrations avec un document XML exemple et quelques règles XSLT:
<project>
<title>Mon project</title>
<problem>
<title>Voici un problème></title>
<description>Je ne connais pas XPATH</description>
</problem>
<solutions>
<item val="moyenne">Vous pouvez acheter un livre sur XSLT</item>
<item val="forte">Vous pouvez suivre un cours et faire des exercices</item>
</solutions>
</project>
Règle (1) XSLT pour la racine XML
<xsl:template match="
/project
">
<xsl:apply-templates select="
title
" />
</xsl:template>
-
xsl:template est une règle XSLT (voir XSLT pour plus d'informations !)
-
L'attribut "match" dit que cette règle s'applique à l'élément
project
sous la racine
-
Le contexte d'exécution est donc l'élément "
project
"
-
xsl:apply-templates permet de déclencher une autre règle. Donc le "
title
" référencé par l'attribut sélect est "Mon projet" (parce que ce
title
est un enfant de project)
Règle (2) XSLT pour l'élément problem
<xsl:template match="
/project
">
<xsl:apply-templates />
</xsl:template>
<xsl:template match=
"problem"
>
<xsl:apply-templates select="title" />
</xsl:template>
-
La deuxième règle sera déclenchée par la première règle, car
problem
est un élément enfant de
project
.
Autrement dit, quand on se place dans le contexte "
project
", problem est un descendant direct.
-
Une fois quand la règle est déclenchée on se retrouve dans le contexte "
problem
".
Donc "
title
" se réfère à "Voici un problème".
B. Chemins pour chercher des attributs
Chercher un attribut d'un élément (contexte courant)
@nom_attribut
Chercher tous les attributs "bla"
//@bla
C. Chemins avec Wildcards
Chercher tous les noeuds de type élément
*
Chercher tous les noeuds (y compris commentaires, etc.)
node()
Chercher tous les attributs
@*
D. Chemin avec prédicats
-
Un prédicat est une
expression logique qui sera vraie ou fausse
et
affine le résultat obtenu
avec un chemin de recherche.
Chercher un élément qui a un attribut
nom_element_XML [ @nom_attribut ]
Chercher un élément qui a un attribut avec une certaine valeur
nom_element_XML [ @nom_attribut = 'valeur']
Chercher un élément qui a un autre élément comme enfant
nom_element_XML [ nom_element_XML ]
Règle (3) XSLT pour définir un chemin en fonction de la valeur d'un attribut
<xsl:template match="
//item[@val='forte']
">
<xsl:value-of select="." />
</xsl:template>
-
Cette règle se déclenche dans le contexte racine
-
Elle sélectionne n'importe quel élément "item" qui a comme attribut "val=forte"