En quoi consiste cet outil ?
XPath (XML Path Language) est un standard du W3C permettant de parcourir et de sélectionner des nœuds — éléments, attributs, texte — dans un document XML au moyen d'une syntaxe compacte proche d'un chemin de fichier ; par exemple, `//book[price>30]/title` sélectionne chaque `<title>` dont le `<price>` voisin est supérieur à 30, où qu'il se trouve dans le document. XPath est utilisé par les feuilles de style XSLT, les outils de validation XML, les scrapers web, les frameworks d'automatisation de navigateur (Selenium, Playwright) et de nombreuses bibliothèques XML dans divers langages de programmation.
La version actuelle implémentée par tous les grands navigateurs — Chrome, Firefox, Safari, Edge — est XPath 1.0, la Recommandation W3C d'origine datant de 1999. Cet outil utilise exactement ce moteur natif via l'API `document.evaluate()` du navigateur, si bien que les résultats obtenus ici correspondent à ceux que vous obtiendriez avec les DevTools du navigateur ou n'importe quel JavaScript exécuté dans un navigateur. Il n'implémente pas les spécifications ultérieures XPath 2.0/3.0/3.1 (qui ajoutent des fonctionnalités comme les expressions `for`, les séquences ou la correspondance par expressions régulières) — voir la FAQ pour ce que cela signifie en pratique.
Une expression peut renvoyer l'un de ces deux types de résultat : un ensemble de nœuds (node-set — zéro ou plusieurs éléments, attributs ou nœuds de texte correspondants, que cet outil sérialise et liste un par ligne avec un décompte), ou une valeur scalaire — un nombre, une chaîne ou un booléen — lorsque l'expression elle-même calcule une valeur, comme `count(//book)` ou `//book[1]/title = 'Dune'`.
Pourquoi l'utiliser ?
- Déboguer une expression XPath avant de l'intégrer en dur dans un scraper web, un test Selenium/Playwright ou une feuille de style XSLT.
- Vérifier rapidement si une expression XPath donnée sélectionne bien le nœud attendu à partir d'un véritable échantillon XML/HTML.
- Consulter le nombre exact de correspondances et la sortie sérialisée plutôt que de deviner à partir du code.
- Obtenir des messages d'erreur immédiats et lisibles en cas de XML mal formé ou de syntaxe XPath invalide, au lieu d'une trace d'erreur cryptique.
- 100 % côté client : votre XML et votre expression ne quittent jamais votre navigateur.
Mode d'emploi
- Collez ou modifiez votre XML (ou HTML) dans le champ de saisie — un exemple de document de librairie est préchargé pour que vous puissiez voir l'outil fonctionner immédiatement.
- Saisissez une expression XPath dans le champ prévu à cet effet, ou modifiez l'exemple préchargé.
- Cliquez sur « Évaluer » (ou appuyez sur Entrée dans le champ d'expression).
- Consultez les nœuds correspondants affichés ci-dessous, avec un décompte en haut ; les résultats scalaires (nombres, chaînes, booléens) sont affichés directement.
- Si le XML ou l'expression n'est pas valide, un message d'erreur précis remplace les résultats.
Exemple
Entrée
XML:
<bookstore>
<book><title>The Great Gatsby</title><price>12.99</price></book>
<book><title>Learning XPath</title><price>34.50</price></book>
<book><title>Dune</title><price>45.00</price></book>
</bookstore>
XPath: //book[price>30]/titleRésultat
✓ 2 node(s) matched
<title>Learning XPath</title>
<title>Dune</title>Seuls 2 des 3 livres ont un prix supérieur à 30, donc exactement 2 éléments <title> sont renvoyés — le troisième livre (Gatsby, 12,99 $) est correctement exclu.
XPath et sélecteurs CSS en un coup d'œil
Ces deux langages sélectionnent des nœuds dans un document, mais ils ne résolvent pas les mêmes problèmes. Utilisez ce tableau pour choisir le bon outil selon la sélection à effectuer.
| Capacité | XPath | Sélecteurs CSS |
|---|---|---|
| Sélection par balise/classe/id en descendant | Oui | Oui — et généralement plus rapide |
| Sélection selon le contenu visible/textuel | Oui — `contains(text(),'x')` | Non |
| Remontée vers un parent/ancêtre | Oui — `//div[span]/..` | Non (`:has()` fait exception, partiellement, depuis peu) |
| Comparaisons entre valeurs voisines (ex. `price>30`) | Oui | Non |
| Fonctionne hors navigateur (outils XML côté serveur, XSLT) | Oui | Non — les sélecteurs CSS sont spécifiques au navigateur/DOM |
Outils associés
Vous travaillez avec des formats de données structurées ? Ces outils se combinent bien avec le test d'expressions XPath.
Foire aux questions
À quoi sert XPath ?
XPath sélectionne des nœuds — éléments, attributs ou texte — dans un document XML ou HTML au moyen d'une syntaxe de chemin. C'est le langage de sélection utilisé par les transformations XSLT et de nombreux validateurs XML, et il est très employé en web scraping ainsi que dans l'automatisation des tests de navigateur (Selenium, Playwright, Cypress) pour localiser des éléments sur une page, en particulier lorsque les sélecteurs CSS seuls ne peuvent pas exprimer la condition recherchée.
XPath ou sélecteurs CSS — lequel choisir ?
Ils se recoupent sans être équivalents. XPath peut sélectionner un parent en fonction du contenu d'un enfant (`//div[span='Total']`), remonter jusqu'aux ancêtres, et sélectionner selon le texte visible (`//button[contains(text(),'Submit')]`) — les sélecteurs CSS ne peuvent pas remonter dans l'arbre ni sélectionner selon le contenu textuel. Si vous sélectionnez simplement par balise, classe ou identifiant en descendant dans le document, les sélecteurs CSS sont plus simples à écrire et généralement plus rapides à évaluer. Tournez-vous vers XPath précisément quand vous avez besoin de « sélectionner le parent de ce texte » ou de « sélectionner selon ce que dit l'élément », et pas seulement selon sa balise ou sa classe.
Cet outil prend-il en charge les fonctions XPath 2.0 ou 3.0 ?
Non — et aucun navigateur ne le fait. Les navigateurs implémentent XPath 1.0 (la Recommandation W3C de 1999) via `document.evaluate()`, et cet outil utilise exactement ce même moteur natif, si bien qu'il reflète fidèlement ce que vous obtiendriez en exécutant la même expression dans les DevTools du navigateur ou en JavaScript. Les fonctions et fonctionnalités introduites par XPath 2.0/3.0/3.1 (comme les expressions `for`, les séquences ou `matches()` avec expressions régulières) ne sont pas disponibles — seules les fonctions de la version 1.0, comme `contains()`, `starts-with()`, `substring()`, `count()`, `position()` et `last()`, fonctionnent ici.
Quelles sont quelques expressions XPath courantes à connaître ?
`//tag` sélectionne chaque `<tag>` où qu'il se trouve dans le document. `//tag[@attr='value']` sélectionne les éléments `<tag>` dont l'attribut `attr` vaut `value`. `//tag[contains(text(),'x')]` sélectionne les éléments `<tag>` dont le texte direct contient `x`. `//tag[1]` sélectionne le premier `<tag>` de chaque fratrie, pour chaque parent. `//parent/child` sélectionne les éléments `<child>` qui sont des enfants directs de `<parent>`. `count(//tag)` renvoie un nombre plutôt qu'un ensemble de nœuds.
Cet outil gère-t-il les espaces de noms XML ?
Seul le cas courant sans espace de noms est correctement pris en charge, ce qui couvre la grande majorité du XML/HTML écrit à la main ou récupéré par scraping. Si votre document déclare un espace de noms XML (par exemple `xmlns="..."` sur l'élément racine), `document.evaluate` requiert une fonction de résolution consciente des espaces de noms qui associe les préfixes à des URI, ce que cet outil simple ne met pas en place — des expressions portant sur du XML avec espaces de noms peuvent alors ne renvoyer aucune correspondance même si elles semblent correctes. Il s'agit d'une limitation connue, pas d'un bug : retirez la déclaration d'espace de noms de votre échantillon, ou utilisez la fonction local-name() (par exemple `//*[local-name()='title']`) comme solution de contournement.
Mon XML ou mon expression XPath sont-ils envoyés à un serveur ?
Non. Tout s'exécute localement grâce au `DOMParser` et au `document.evaluate()` intégrés à votre navigateur — le même moteur que votre navigateur utilise déjà en interne. Rien de ce que vous saisissez ou collez ne quitte jamais votre appareil.