1. Accueil
  2. Blog
  3. Comment utiliser XPath pour trouver des données dans du XML
Outils XML

Comment utiliser XPath pour trouver des données dans du XML

Publié le 30 octobre 2026 · 7 min de lecture

XPath est un petit langage pour désigner des parties d’un document XML, un peu comme un chemin désigne un fichier sur votre ordinateur. Au lieu de lire tout le fichier, vous écrivez //book/title et obtenez tous les titres de livres. On le retrouve dans XSLT, dans des outils de test comme Selenium, dans les imports de données, dans les fichiers de configuration et dans presque tous les langages qui lisent du XML.

Ce guide présente le XPath que vous utiliserez vraiment, avec de vrais résultats, dans le testeur XPath gratuit. Tous les exemples fonctionnent sur l’Exemple du testeur lui-même : vous pouvez suivre en même temps.

Le XML d’exemple

Une petite librairie avec deux livres :

<shop name="Corner Books">
  <book id="bk101" lang="en">
    <title>XML &amp; JSON for Everyone</title>
    <author>Ada Lovelace</author>
    <price currency="EUR">29.95</price>
    <inStock>true</inStock>
    <tag>data</tag>
    <tag>web</tag>
  </book>
  <book id="bk102" lang="de">
    <title>Daten für alle</title>
    <author>Alan Turing</author>
    <price currency="EUR">24.50</price>
    <inStock>false</inStock>
    <tag>data</tag>
    <discount/>
  </book>
</shop>

Tester une expression XPath

  1. Ouvrez le testeur XPath. Cliquez sur Exemple pour charger la librairie ci-dessus, ou collez votre propre XML ou ouvrez un fichier.
  2. Saisissez une expression dans Expression XPath. La ligne en dessous affiche ✓ Expression XPath valide dès qu’elle est complète. Les boutons Essayez : insèrent des exemples prêts à l’emploi.
  3. Appuyez sur Entrée ou cliquez sur Exécuter XPath. Vous voyez combien de nœuds correspondent, chacun avec son type (élément, attribut, texte…) et sa ligne ; cliquez sur le numéro de ligne pour y aller dans le XML.

Les briques de base

  • / descend d’un niveau ; au début, il signifie « depuis le haut du document ».
  • // cherche à n’importe quelle profondeur. //title trouve les titres où qu’ils soient.
  • @ désigne un attribut : @id est l’attribut id.
  • [ ] filtre : seuls restent les nœuds pour lesquels la condition est vraie.
  • * correspond à n’importe quel élément, . est le nœud courant et .. son parent.

Sélectionner des données

  • //book/title: l’élément title de chaque livre → 2 résultats : « XML & JSON for Everyone » et « Daten für alle »
  • //title/text(): seulement le texte des titres → les deux mêmes textes, sans balises
  • //book/@id: l’attribut id de chaque livre → bk101 et bk102
  • /shop/@name: l’attribut name de l’élément racine → Corner Books
  • //price/@currency: la devise de chaque prix → EUR et EUR

Filtrer avec des conditions

  • //book[@lang='en']/title: titres des livres dont l’attribut lang vaut « en » → XML & JSON for Everyone
  • //book[price > 25]/title: titres des livres qui coûtent plus de 25 → XML & JSON for Everyone
  • //book[tag='web']/author: auteurs des livres avec l’étiquette « web » → Ada Lovelace
  • //book[inStock='true']/title: livres en stock → XML & JSON for Everyone
  • //book[discount]/@id: livres qui ont un élément discount → bk102
  • //title[contains(., 'JSON')]: titres qui contiennent le mot JSON → XML & JSON for Everyone
  • //book[1]/author: l’auteur du premier livre → Ada Lovelace
  • //book[last()]/title: le titre du dernier livre → Daten für alle
  • //*[not(node())]: les éléments vides, souvent des erreurs → <discount/>

Les conditions se combinent avec and et or, par exemple //book[@lang='en' and price > 25].

Compter et additionner

XPath peut aussi renvoyer une seule valeur au lieu de nœuds :

  • count(//book): combien de livres il y a → 2
  • sum(//price): le total de tous les prix → 54.45
  • boolean(//book[price > 100]): y a-t-il un livre à plus de 100 ? → false

Deux erreurs que presque tout le monde commet

1. Le piège de l’espace de noms par défaut

Beaucoup de fichiers réels, comme les flux RSS et Atom, les sitemaps, les fichiers Office ou les messages SOAP, commencent par un espace de noms par défaut :

<feed xmlns="http://www.w3.org/2005/Atom">
  <entry><title>Hello</title></entry>
</feed>

Ici, //entry/title ne trouve rien, car chaque élément appartient à cet espace de noms et un nom simple ne correspond pas. Cherchez plutôt par nom local : //*[local-name()='entry']/*[local-name()='title']. Le testeur XPath repère cette situation et vous le signale.

2. Des fonctions de versions plus récentes de XPath

Les navigateurs, Selenium et la plupart des bibliothèques utilisent XPath 1.0. Les fonctions de XPath 2.0 et suivants, comme lower-case(), matches() ou ends-with(), n’y existent pas. Pour ignorer majuscules et minuscules en XPath 1.0, utilisez translate() ; pour vérifier la fin d’une valeur, comparez une substring().

Petits pièges

  • Les positions commencent à 1, pas à 0 : //book[1] est le premier livre.
  • Les comparaisons de texte sont exactes, majuscules, minuscules et espaces compris : [tag='Web'] ne correspond pas à « web ».
  • Pour mettre des guillemets dans des guillemets, alternez le type : //book[title="Daten für alle"] ou [title='…'].

Autres outils XML

Mon XML est-il envoyé ?

Non. Le XPath s’exécute dans votre navigateur : votre XML ne quitte jamais votre appareil. Notre serveur enregistre seulement qu’un test a eu lieu, pour la limite quotidienne.

Questions fréquentes

Quelle version de XPath le testeur utilise-t-il ?

XPath 1.0, celle des navigateurs, de Selenium et de la plupart des bibliothèques : une expression qui fonctionne ici fonctionne aussi là-bas.

Puis-je tester du XPath sur une page web (HTML) ?

Ce testeur demande du XML bien formé, ce que la plupart des pages web ne sont pas. Pour une page ouverte, utilisez la console des outils de développement : dans Chrome et Edge, $x("//h1") exécute un XPath sur la page.

Pourquoi mon expression ne renvoie-t-elle rien ?

Vérifiez d’abord s’il y a un espace de noms par défaut, puis les majuscules et les espaces dans les comparaisons de texte. Commencez par un chemin court comme //book et ajoutez une étape à la fois.