TUTORIELS 
XPath : accéder à une partie d'un document XML
XPath est un langage d'adressage destiné à la recherche de noeuds dans un document XML. Présentation de la syntaxe de sélection.  (7 février 2002)
 

Exploité par XPointer et XSLT, XPath est une recommandation du W3C.
Fruit de la collaboration entre les "XSL et XPointer Working Groups", XPath doit permettre de combler certains besoins communs de ces deux techniques : accéder à un endroit spéficique d'un arbre XML.

XPath n'est pas seulement un langage "d'adressage", il est également constitué d'un ensemble de fonctions (chaînes de caractères, booléennes, numériques) destinés à accroître encore ses possibilités. Nous étudions uniquement aujourd'hui la syntaxe destinée à localiser un point précis du document XML.

Les principes sur lesquels XPath repose

XPath tire son nom du rapprochement qu'on peut établir entre sa syntaxe ("location path") et celle des fonctions utilisées en général dédiées aux système de fichiers.
Nous verrons en effet à l'aide d'exemples comment cette similitude s'exprime.

Avec XPath, chaque document XML est perçu sous la forme d'un arbre, pourvu de noeuds. Ces derniers sont au nombre de sept :

- Le noeud racine (root node)
- Les noeuds d'élements (element nodes)
- Les noeuds d'attributs (attributes nodes)
- Les noeuds de texte (text nodes)
- Les noeuds d'espaces de noms (namespace nodes)
- Les noeuds d'instructions de traitement (processing instruction nodes)
- Les noeuds de commentaires (comment nodes)

Afin de pointer sur un objet précis, XPath utilise des chemins.
Un chemin se compose d'un axe (choisi parmi treize), d'un test sur un type de noeud, et d'un ou plusieurs prédicats.

Un axe représente la relation entre le noeud courant et les noeuds que l'on souhaite sélectionner. Voici quelques-uns des axes disponibles :

- ancestor
- child
- descendant
- following
- preceding
- parent
- self


Un exemple devrait clarifier ces définitions :
Le chemin /descendant::* signifie que tous les éléments, en partant de la racine ("/"), doivent être sélectionnés.

<catalogue>
     <voiture>
          <marque>Renault</marque>
          <modele>Clio</modele>
     </voiture>
</catalogue>

Autre exemple, plus simple, à partir du même schéma : /catalogue/voiture/*

<catalogue>
     <voiture>
          <marque>Renault</marque>
          <modele>Clio</modele>

     </voiture>
</catalogue>

Ou encore, /catalogue/voiture/marque/ancestor::* et on obtient :

<catalogue>
     <voiture>

          <marque>Renault</marque>
          <modele>Clio</modele>
     </voiture>
</catalogue>

Un chemin peut se définir de deux manières, de manière abrégée ou pas.
La syntaxe complète se compose du nom d'un axe, suivi d'un noeud de test, le tout séparé par "::", un ou plusieurs prédicats suivent (facultatif).

Le chemin /catalogue peut également s'écrire /child::catalogue, ce qui donne :

<catalogue>
     
<voiture>
          <marque>Renault</marque>
          <modele>Clio</modele>
     </voiture>
</catalogue>

Reste maintenant à vous familiariser avec les axes et prédicats disponibles. Plutôt que de parcourir de suite la recommandation du W3C, nous vous conseillons de passer par cette bonne sélection d'exemples, de difficultés progressives.
Entrainez-vous à deviner quels éléments seront sélectionnés en ne consultant que le chemin, puis testez vos connaissances fraîchement acquises en écrivant vous-mêmes votre "XPath".

Un bon complément d'informations sur XPatch est également disponible via cette publication en ligne d'un chapitre d'ouvrage O'Reilly.

 
[ Arnaud Gadal JDNet
 
Accueil | Haut de page