Le langage XPath, défini par le W3C dans la spécification XML Path Language Version 1.0, fournit les moyens de sélectionner des noeuds précis de l'arborescence DOM d'un document XML.

Le modèle de données XPath est composés de huit noeuds XML.

  • Document : le noeud comprenant le prologue XML, d'éventuelles instructions de traitement et commentaire ainsi que l'élément racine,
  • Element : les noeuds contenant des noeuds enfants (Element, Text, Comment et ProcessingInstruction). Ces noeuds peuvent contenir également des attributs et des espaces de noms.
  • Attr : les noeuds Attr sont les attributs des noeuds Element. Ces noeuds ne doivent pas déclarer d'URI d'espaces de noms. Autrement dit, ils ne doivent pas possèder le nom xmlns.
  • Text : les noeuds sont compris au sein des balises des noeuds Element et sont le contenu des commentaires et des instructions de traitement.
  • EntityReference : les références d'entité sont contenues dans du texte et sont définies dans l'instruction ENTITY de la définition de type de document.
  • ProcessingInstruction : Les instructions de traitement indiquent à un processeur spécifique (ex.: XSLT, PHP, Perl, etc.) une opération à appliquer sur le document ou sur un noeud de ce document.
  • Comment : les commentaires se remarquent par leurs délimiteurs <!-- et -->.
  • Namespace : les espaces de noms désignent un domaine d'appartenance à des éléments et attributs.

Les expressions XPath ressemblent aux chemins utilisés pour accéder à des dossiers ou fichiers dans le système de fichiers Unix.

<?xml version="1.0"?>
<racine>
  <element id="elt1">
    <enfant>valeur 1</enfant>
  </element>
  <element id="elt2">
    <enfant>valeur 2</enfant>
  </element>
  <element id="elt3">
    <enfant>valeur 3</enfant>
  </element>
</racine>

/* Expressions XPath
/racine -> Sélection de l'élément racine
/racine/element -> Sélection des éléments element
/racine/element/enfant -> Sélection des éléments enfant
/racine/element/@id -> Sélection des attributs id
*/

Des caractères spéciaux permettent de construire des expressions plus compactes et relatives par rapport à un noued contextuel.

/* Expressions XPath
Sélection de l'élément racine
/racine
Sélection des éléments element
//element
Sélection des éléments enfant
/racine//enfant
Sélection des éléments enfant du noeud fils 
du noeud contextuel (ex.: racine)
*/enfant
Sélection du noeud parent element du noeud 
contextuel (ex.: <enfant>valeur 3</enfant>)
../element
. -> Sélection du noeud courant (ex.: valeur 2)
*/

Des prédicats peuvent être inclus dans les expressions XPath afin de cibler plus précisément des noeuds XML.

/* Expressions XPath
Sélection du premier élément element
/racine/element[1]
Sélection de l'élément portant l'attribut id="elt2"
/racine/element[@id='elt2']
Sélection de l'élément comprenant un élément <enfant>valeur 3</enfant>
/racine/element[enfant='valeur 3']
*/

Des axes nodaux et des fonctions complètes la panoplie du langage XPath.

/* Expressions XPath
Sélection du noeud grand-frère du noeud courant
following-sibling::*
Sélection du noeud enfant du noeud courant (ex.: element)
descendant::enfant
Sélection du noeud enfant du troisième noeud 
element du noeud parent du noeud courant
ancestor::*/element[3]/enfant
Sélection du contenu textuel du noeud enfant du noeud 
element portant l'attribut id="elt2"
//element[@id='elt2']/enfant/text()
Sélection du dernier noeud element
//element[last()]
Sélection du noeud element à la position numéro 2
//element[position()=2]
Comptabilise le nombre de noeuds éléments
count[//element]

En outre, XPath compte un ensemble d'opérateurs arithmétiques et booléens permettant de combiner des prédicats.

/* Expressions XPath
Sélection de l'avant-dernier noeud element
//element[position()=last() - 1]
Sélection du noeud element contenant l'attribut id dont la valeur 
se termine par 2 et qui est situé à la seconde position
//element[substring(@id, 2, 3)='2' and position()=2]
*/
Sommaire