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"