logo oujood
🔍

Les Axes XPath : Navigation Avancée dans les Documents XML

Comprenez comment utiliser les axes de recherche XPath pour interroger et manipuler vos structures XML de manière professionnelle

OUJOOD.COM

Introduction aux Axes XPath

Les axes de recherche XPath constituent l'un des concepts fondamentaux pour interroger et naviguer dans des documents XML. Un axe définit une relation de navigation entre le nœud de contexte actuel et un ensemble de nœuds cibles dans l'arborescence XML. Chaque axe permet de parcourir le document selon une direction spécifique : vers les ancêtres, les descendants, les frères et sœurs, ou d'autres relations hiérarchiques.

Cette page explore en détail les 13 axes standard de XPath, leur syntaxe précise, et leurs applications pratiques dans des scénarios réels de traitement de données XML. Vous apprendrez à construire des expressions XPath complexes en combinant axes, tests de nœuds et prédicats pour extraire exactement les informations dont vous avez besoin.

Document XML d'Exemple pour les Démonstrations

Document XML de référence utilisé dans ce tutoriel XPath

Pour illustrer concrètement l'utilisation des axes XPath dans des requêtes réelles, nous utiliserons le document XML suivant tout au long de cette page. Ce document représente un catalogue de produits avec des livres et articles, incluant des attributs, des nœuds de texte et des commentaires pour couvrir tous les types de sélections possibles.

  📋 Copier le code

<?xml version="1.0" encoding="UTF-8"?>
<!-- Document XML représentant un catalogue de produits -->
<stock>
  <livre>
    <title lang="eng">Harry Potter</title>
    <prix>29.99</prix>
    <auteur>J.K. Rowling</auteur>
  </livre>
  <livre>
    <title lang="eng">Learning XML</title>
    <prix>39.95</prix>
    <auteur>Erik T. Ray</auteur>
  </livre>
  <produit>
    <nom>Livre</nom>
    <prix monnaie="Francs">50</prix>
    <comment>Un commentaire descriptif</comment>
  </produit>
  <produit>
    <nom>CD</nom>
    <prix monnaie="Euros">23</prix>
  </produit>
  <!-- Commentaire XML dans le document -->
</stock>

Les 13 Axes de Recherche XPath Expliqués

XPath définit 13 axes différents pour naviguer dans l'arbre XML. Chaque axe représente une direction de navigation spécifique par rapport au nœud de contexte. Comprendre ces axes est essentiel pour écrire des requêtes XPath efficaces et performantes.

Un axe XPath détermine l'ensemble des nœuds accessibles à partir du nœud actuel selon une relation hiérarchique ou positionnelle donnée. La maîtrise de ces axes permet de créer des sélecteurs XML précis sans avoir à parcourir l'ensemble du document.

Nom de l'Axe Traduction Française Description et Résultat
ancestor ancêtre Sélectionne tous les nœuds ancêtres (parent, grand-parent, arrière-grand-parent, etc.) du nœud actuel jusqu'à la racine du document, en remontant la hiérarchie XML
ancestor-or-self ancêtre-ou-soi-même Sélectionne tous les nœuds ancêtres du nœud actuel (parent, grand-parent, etc.) ainsi que le nœud actuel lui-même, utile pour inclure le contexte dans la sélection
attribute attribut Sélectionne tous les attributs XML du nœud actuel. Cet axe ne retourne que les attributs, jamais les nœuds enfants ou autres types de nœuds
child enfant Sélectionne tous les nœuds enfants directs du nœud actuel. C'est l'axe par défaut utilisé lorsqu'aucun axe n'est spécifié explicitement dans une expression XPath
descendant descendant Sélectionne tous les nœuds descendants (enfants, petits-enfants, arrière-petits-enfants, etc.) du nœud actuel à tous les niveaux de profondeur
descendant-or-self descendant-ou-soi-même Sélectionne tous les nœuds descendants du nœud actuel (à tous les niveaux) ainsi que le nœud actuel lui-même, pratique pour des recherches inclusives
following suivant Sélectionne tous les nœuds qui apparaissent après la balise de fermeture du nœud actuel dans le document XML, en ordre de document, excluant les descendants
following-sibling frère-suivant Sélectionne tous les nœuds frères et sœurs qui suivent le nœud actuel et qui partagent le même parent, dans l'ordre du document
namespace espace-de-noms Sélectionne tous les nœuds d'espace de noms (namespace) déclarés pour le nœud actuel, utilisé dans les documents XML avec namespaces multiples
parent parent Sélectionne le nœud parent direct du nœud actuel. Il ne peut y avoir qu'un seul parent pour chaque nœud (sauf la racine qui n'en a pas)
preceding précédant Sélectionne tous les nœuds qui apparaissent avant la balise d'ouverture du nœud actuel dans le document, en ordre inverse, excluant les ancêtres
preceding-sibling frère-précédent Sélectionne tous les nœuds frères et sœurs qui précèdent le nœud actuel et qui partagent le même parent, dans l'ordre inverse du document
self soi-même Sélectionne le nœud de contexte actuel lui-même, utile dans certaines expressions complexes ou pour des tests conditionnels

Syntaxe des Expressions de Chemin XPath

Une expression de chemin XPath permet de localiser précisément des nœuds dans un document XML. Ces chemins peuvent être absolus ou relatifs, chaque approche ayant ses avantages selon le contexte d'utilisation.

Chemins Absolus versus Chemins Relatifs

Un chemin XPath absolu commence toujours par une barre oblique (/) et part de la racine du document XML. À l'inverse, un chemin XPath relatif ne commence pas par / et s'évalue à partir du nœud de contexte actuel. Cette distinction est cruciale pour construire des requêtes adaptées à votre situation.

Chemin absolu XPath :

/step/step/step/...

Exemple : /stock/livre/title

Chemin relatif XPath :

step/step/step/...

Exemple : livre/title ou ./prix

Structure d'une Étape de Localisation

Chaque étape (step) dans un chemin XPath est évaluée séquentiellement pour l'ensemble de nœuds dans le contexte actuel. Une étape complète se compose de trois éléments fondamentaux :

  • Un axe de navigation : définit la direction de recherche dans l'arborescence (ancestor, child, descendant, following, etc.) et établit la relation entre les nœuds sélectionnés et le nœud de contexte
  • Un test de nœud : identifie le type ou le nom des nœuds à sélectionner dans l'axe spécifié (nom d'élément, text(), node(), *, etc.)
  • Zéro ou plusieurs prédicats (filtres entre crochets []) : affinent davantage l'ensemble de nœuds sélectionné en appliquant des conditions supplémentaires

La syntaxe formelle d'une étape de localisation XPath suit ce modèle :

axisname::nodetest[predicate1][predicate2]...

Exemple : child::livre[prix>30][1]

Exemples Pratiques d'Utilisation des Axes XPath

Le tableau suivant présente des exemples concrets d'utilisation de chaque axe XPath avec des explications détaillées de leur fonctionnement dans le contexte de notre document XML d'exemple.

Expression XPath avec Axe Résultat et Explication
child::livre Sélectionne tous les éléments livre enfants directs du nœud actuel. Si le contexte est /stock, retourne les deux éléments <livre>
attribute::lang Sélectionne l'attribut lang du nœud actuel. Équivalent à @lang. Si le contexte est un élément <title>, retourne l'attribut lang="eng"
child::* Sélectionne tous les éléments enfants du nœud actuel, quel que soit leur nom. Le wildcard * correspond à n'importe quel nom d'élément
attribute::* Sélectionne tous les attributs du nœud actuel, indépendamment de leurs noms. Utile pour traiter tous les attributs d'un élément
child::text() Sélectionne tous les nœuds de texte enfants du nœud actuel. Retourne uniquement le contenu textuel, pas les éléments enfants
child::node() Sélectionne tous les types de nœuds enfants : éléments, texte, commentaires, instructions de traitement, etc.
descendant::livre Sélectionne tous les éléments livre descendants à n'importe quel niveau de profondeur sous le nœud actuel, incluant enfants, petits-enfants, etc.
ancestor::livre Sélectionne tous les éléments livre ancêtres du nœud actuel en remontant la hiérarchie jusqu'à la racine
ancestor-or-self::livre Sélectionne tous les ancêtres livre du nœud actuel, et inclut également le nœud lui-même s'il s'agit d'un élément <livre>
child::*/child::prix Sélectionne tous les éléments prix petits-enfants du nœud actuel. Cette expression traverse deux niveaux : d'abord les enfants (quelconques), puis leurs enfants nommés prix

Exemple Pratique avec Code Commenté

Voici une démonstration concrète d'utilisation des axes XPath en JavaScript pour extraire des données du document XML :

  📋 Copier le code

// Chargement et parsing du document XML
var xmlDoc = parser.parseFromString(xmlString, "text/xml");
var root = xmlDoc.documentElement;
// Utilisation de l'axe child pour sélectionner les livres
var livres = xmlDoc.evaluate("child::livre", root, null, XPathResult.ANY_TYPE, null);
// Utilisation de l'axe descendant pour tous les prix
var tousPrix = xmlDoc.evaluate("descendant::prix", root, null, XPathResult.ANY_TYPE, null);
// Utilisation de l'axe following-sibling
var premierLivre = xmlDoc.evaluate("child::livre[1]", root, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
var freresSuivants = xmlDoc.evaluate("following-sibling::*", premierLivre, null, XPathResult.ANY_TYPE, null);
// Parcours des résultats
var node = tousPrix.iterateNext();
while (node) {
  console.log("Prix trouvé : " + node.textContent);
  node = tousPrix.iterateNext();
}

Filtrage Avancé des Nœuds avec XPath

Les fonctions de test de nœuds XPath permettent d'affiner vos sélections en filtrant les types de nœuds retournés. Ces fonctions sont essentielles pour construire des requêtes XPath professionnelles et précises.

Fonction node() - Sélection de Tous Types de Nœuds

Syntaxe : node()

La fonction node() sélectionne tous les types de nœuds dans l'axe spécifié, à l'exception du nœud racine du document. Elle retourne les éléments, les nœuds de texte, les commentaires et les instructions de traitement.

  📋 Copier le code

/* Sélectionne tous les nœuds enfants de produit,
   incluant éléments, texte et commentaires */
/stock/produit/node()
/* Pour le premier produit, retourne :
   - nœud élément <nom>
   - nœud élément <prix>
   - nœud élément <comment>
   - nœuds texte entre les balises */

Fonction id() - Sélection par Identifiant

Syntaxe : id(label)

La fonction id() permet de sélectionner directement un nœud repéré par un identifiant unique (attribut de type ID dans la DTD ou le schéma XML). C'est la méthode la plus rapide pour accéder à un nœud spécifique.

  📋 Copier le code

/* Sélectionne le nœud ayant l'ID 'CD',
   puis accède à son élément prix enfant */
id('CD')/prix
/* Équivalent à naviguer directement vers
   le nœud sans parcourir l'arborescence */

Prédicats et Conditions dans les Expressions XPath

Les prédicats XPath (conditions entre crochets) constituent le mécanisme de filtrage le plus puissant pour affiner vos sélections. Ils permettent de définir des critères complexes de sélection de nœuds basés sur l'existence, la position ou des comparaisons de valeurs.

Rappel syntaxique : Les sélecteurs de nœuds suivent la forme générale :

axe::filtre[condition1][condition2][condition3]...

Conditions d'Existence de Nœuds

Une condition d'existence XPath est vraie si l'expression retourne un ensemble non vide de nœuds. C'est la forme de prédicat la plus simple et très utilisée en pratique.

  📋 Copier le code

/* Sélectionne les produits qui possèdent
   un élément prix avec un attribut monnaie */
/stock/produit[prix/attribute::monnaie]
/* Forme alternative équivalente avec notation abrégée */
/stock/produit[prix[@monnaie]]
/* Résultat : les deux éléments produit car ils ont
   tous les deux l'attribut monnaie sur leur prix */
/* Autre exemple : produits avec commentaire */
/stock/produit[comment]
/* Retourne uniquement le premier produit
   car il possède un élément <comment> */

Conditions de Position dans le Contexte

Les prédicats de position XPath utilisent des numéros pour sélectionner des nœuds selon leur rang dans l'ensemble de nœuds du contexte actuel. La position commence à 1 (pas à 0 comme en programmation).

  📋 Copier le code

/* Première expression : teste d'abord la position,
   puis vérifie l'existence de comment */
produit[2][comment]
/* Signification : "le 2ème produit, SI il a un comment"
   Retourne vide car le 2ème produit n'a pas de comment */
/* Deuxième expression : teste d'abord l'existence,
   puis sélectionne par position */
produit[comment][2]
/* Signification : "le 2ème produit PARMI ceux qui ont un comment"
   Retourne également vide car un seul produit a un comment */
/* Exemple supplémentaire : dernier élément */
produit[last()]
/* Sélectionne le dernier produit dans la liste */
/* Exemple : premier livre avec prix > 30 */
livre[prix > 30][1]

Conditions Logiques et Opérateurs de Comparaison

Les conditions logiques XPath permettent d'effectuer des comparaisons entre valeurs de nœuds et d'utiliser des opérateurs booléens pour combiner plusieurs critères. Ces conditions sont évaluées en utilisant les opérateurs de comparaison : =, !=, <, <=, >, >=.

  📋 Copier le code

/* (1) Égalité stricte : produits avec prix égal à 100 */
produit[prix = 100]
/* Retourne les produits dont le prix vaut exactement 100 */
/* (2) Inégalité : produits avec prix différent de 100 */
produit[prix != 100]
/* Retourne les produits dont le prix est autre que 100 */
/* (3) Comparaison relative : produits moins chers
   que le prix maximum du catalogue */
produit[prix < /stock/produit/prix]
/* Cette expression retourne tous les produits
   sauf celui(ceux) ayant le prix le plus élevé */
/* (4) Opérateur AND : combinaison de conditions */
produit[prix > 10 and comment]
/* Sélectionne les produits avec prix supérieur à 10
   ET possédant un élément comment */
/* (5) Opérateur OR : alternative entre conditions */
produit[prix < 20 or nom = 'CD']
/* Retourne les produits peu chers OU nommés 'CD' */
/* (6) Négation avec NOT : inversion de condition */
produit[not(prix != 100)]
/* Équivalent à : tous les produits où le prix égale 100
   La double négation not(!=) devient une égalité */
/* (7) Conditions complexes imbriquées */
livre[(prix > 30 and @lang='eng') or auteur='J.K. Rowling']
/* Livres en anglais coûtant plus de 30€
   OU écrits par J.K. Rowling */

Exemples Avancés de Combinaison d'Axes et Prédicats

Voici des exemples pratiques de requêtes XPath complexes combinant plusieurs concepts pour des sélections sophistiquées :

  📋 Copier le code

/* Sélection avec axe descendant et condition */
/stock/descendant::prix[@monnaie='Euros']
/* Trouve tous les prix en Euros à n'importe quel
   niveau sous l'élément stock */
/* Utilisation de following-sibling avec prédicat */
//livre[1]/following-sibling::livre[prix > 30]
/* Après le premier livre, trouve les livres frères
   dont le prix dépasse 30 */
/* Combinaison d'axes ancestor et child */
//prix/ancestor::produit/child::nom
/* Pour chaque élément prix, remonte à son produit parent
   puis sélectionne l'élément nom enfant */
/* Requête avec fonction count() */
/stock/*[count(prix) > 0]
/* Sélectionne les enfants de stock ayant
   au moins un élément prix */
/* Navigation complexe avec plusieurs prédicats */
/stock/livre[position() < 3][prix < 35][title/@lang]
/* Livres : parmi les 2 premiers, prix < 35,
   ayant un attribut lang sur le title */

Notations Abrégées XPath Couramment Utilisées

XPath propose des syntaxes abrégées qui simplifient l'écriture des expressions courantes. Ces raccourcis rendent le code plus lisible tout en conservant la même fonctionnalité.

Notation Abrégée Forme Complète Explication
@attribut attribute::attribut Raccourci pour l'axe attribute
. self::node() Représente le nœud de contexte actuel
.. parent::node() Représente le nœud parent
// /descendant-or-self::node()/ Sélection depuis la racine à tous niveaux
element child::element L'axe child est implicite par défaut

Bonnes Pratiques pour les Requêtes XPath Performantes

Pour écrire des expressions XPath efficaces et maintenables, suivez ces recommandations professionnelles :

  • Utilisez des chemins spécifiques : préférez /stock/livre/prix à //prix quand la structure est connue, pour optimiser les performances
  • Évitez les axes coûteux : les axes preceding et following peuvent être lents sur de gros documents, utilisez-les judicieusement
  • Combinez les prédicats intelligemment : placez les conditions les plus restrictives en premier pour réduire rapidement l'ensemble de nœuds
  • Exploitez les index : utilisez la fonction id() quand des identifiants sont disponibles pour un accès direct
  • Testez vos expressions : validez vos requêtes XPath avec des outils comme XPath tester avant de les intégrer
  • Documentez les expressions complexes : ajoutez des commentaires pour expliquer la logique des requêtes sophistiquées

Cours précédent :
 Syntaxe XPath
    Sommaire :
Le Langage XML
 Cours suivant :
Opérateurs et Fonctions XPath 

Par carabde | Mis à jour le 27 janvier 2026

\