ToolDeck

Testeur XPath

Testez des expressions XPath sur du XML et visualisez tous les nœuds correspondants

Essayer un exemple

Entrée XML

Fonctionne localement · Sûr pour coller des secrets

Qu'est-ce que XPath ?

XPath (XML Path Language) est un langage de requête permettant de sélectionner des nœuds dans un document XML. Défini par le W3C dans le cadre du standard XSLT, XPath traite un document XML comme un arbre de nœuds et fournit une syntaxe basée sur les chemins pour naviguer dans cet arbre. Une expression XPath comme //book[@category="fiction"]/title sélectionne tous les éléments title contenus dans un élément book dont l'attribut category est égal à "fiction". XPath 1.0, la version prise en charge par tous les navigateurs majeurs et la plupart des bibliothèques XML, a été publiée en tant que recommandation W3C en 1999 et reste la version la plus largement déployée.

Les expressions XPath retournent l'un des quatre types de résultats suivants : ensembles de nœuds, chaînes, nombres ou booléens. Un ensemble de nœuds est le résultat le plus courant et contient zéro ou plusieurs nœuds XML (éléments, attributs, nœuds texte, commentaires ou instructions de traitement). Les résultats de type chaîne, nombre et booléen proviennent des fonctions XPath comme count(), sum(), contains() et des comparaisons booléennes. Ce système de types rend XPath adapté à la fois à l'extraction de données et à l'écriture de logique conditionnelle dans les feuilles de style XSLT et les assertions XML Schema.

Les expressions de la version 1.0 fonctionnent partout : document.evaluate() en JavaScript, lxml et ElementTree en Python, javax.xml.xpath en Java, DOMXPath en PHP, et les outils en ligne de commande comme xmllint. Les versions 2.0 et 3.1 ajoutent des systèmes de types plus riches et des fonctions supplémentaires, mais nécessitent des moteurs dédiés comme Saxon. Utilisez la version 1.0 par défaut. Optez pour la version 2.0 ou 3.1 uniquement si vous avez besoin de séquences, d'expressions régulières ou de fonctions d'ordre supérieur — et acceptez la dépendance envers Saxon ou BaseX.

Pourquoi utiliser un testeur XPath en ligne ?

Écrire des expressions correctes requiert de comprendre la structure du document et de les tester sur des données réelles. L'outil offre un environnement interactif pour itérer sur les expressions sans avoir à configurer un projet ou écrire du code d'initialisation.

Testez les expressions instantanément
Collez votre XML, saisissez une expression et visualisez les nœuds correspondants en temps réel. Aucune étape de compilation, aucune configuration de REPL, aucune dépendance à installer.
🔒
Traitement axé sur la confidentialité
L'ensemble de l'analyse XML et de l'évaluation des requêtes s'effectue dans votre navigateur via les API natives DOMParser et document.evaluate(). Vos données XML ne quittent jamais votre machine.
🔍
Déboguez les requêtes complexes étape par étape
Décomposez les expressions longues en testant chaque axe et prédicat séparément. Voyez exactement quels nœuds correspondent à chaque étape pour isoler les erreurs.
📋
Copiez les résultats pour la documentation
Copiez les nœuds correspondants ou les résultats scalaires en un clic. Pratique pour les coller dans des rapports de bugs, des assertions de tests ou des scripts d'extraction de données.

Cas d'usage du testeur XPath

Développeur frontend
Testez les sélecteurs XPath pour la manipulation SVG ou les configurations XML avant de les intégrer dans du code JavaScript qui appelle document.evaluate().
Ingénieur backend
Validez les requêtes sur des réponses SOAP ou des charges utiles d'API XML avant d'écrire la logique d'extraction en Python, Java ou Go.
DevOps / Infrastructure
Interrogez les fichiers de configuration XML (Maven pom.xml, Spring beans, configs de pipeline CI) pour extraire les versions de dépendances ou vérifier les paramètres sans modifier les fichiers.
QA / Automatisation des tests
Construisez et vérifiez les localisateurs XPath pour Selenium ou Playwright avant de les ajouter aux scripts de test. Testez les cas limites comme les attributs manquants ou les préfixes de namespace.
Ingénieur données
Prototypez des requêtes pour des flux de données XML (RSS, Atom, rapports financiers XBRL) avant de les intégrer dans des pipelines ETL.
Étudiant / apprenant
Expérimentez avec les axes, prédicats et fonctions XPath sur des exemples XML. Visualisez les résultats immédiatement pour développer votre intuition des modèles de traversée d'arbre.

Référence des axes XPath

Un axe définit la direction de navigation par rapport au nœud courant (contexte). La syntaxe complète est axis::node-test[predicate], bien que la plupart des développeurs utilisent quotidiennement les formes abrégées (//, @, ..). Ce tableau liste tous les axes de la version 1.0 avec des exemples pratiques.

AxeExempleDescription
childchild::bookDirect children named "book"
descendantdescendant::titleAll "title" elements at any depth
parentparent::*The parent of the current node
ancestorancestor::catalogAll ancestors named "catalog"
following-siblingfollowing-sibling::bookSiblings after the current node
preceding-siblingpreceding-sibling::bookSiblings before the current node
attributeattribute::langThe "lang" attribute of the node
selfself::bookThe current node if it is "book"
descendant-or-self//titleShorthand: any "title" in the tree
ancestor-or-selfancestor-or-self::*Current node plus all ancestors

Fonctions XPath 1.0

Le langage définit 27 fonctions intégrées réparties en quatre catégories : ensemble de nœuds, chaîne, nombre et booléen. Ce sont les fonctions que vous utiliserez le plus souvent lors de l'écriture de requêtes. Toutes sont prises en charge par ce testeur et par toute implémentation conforme.

FonctionCatégorieDescription
text()Node testSelects text content of a node
position()NumericReturns 1-based position in node set
last()NumericReturns size of current node set
count()NumericCounts nodes: count(//book)
contains()Stringcontains(@class, "active") — substring match
starts-with()Stringstarts-with(title, "The") — prefix match
normalize-space()StringStrips leading/trailing whitespace
string-length()NumericReturns character count of a string
sum()Numericsum(//price) — totals numeric values
not()Booleannot(@disabled) — negation
name()StringReturns element or attribute name

Exemples de code

Ces exemples montrent comment évaluer des expressions par programmation. Chaque extrait utilise la même structure catalog.xml afin que vous puissiez comparer les différences d'API entre les langages.

JavaScript (browser)
const xml = `<catalog>
  <book id="1"><title>1984</title><price>7.99</price></book>
  <book id="2"><title>Dune</title><price>12.99</price></book>
</catalog>`

const parser = new DOMParser()
const doc = parser.parseFromString(xml, 'application/xml')

// Select all book titles
const result = doc.evaluate('//book/title', doc, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null)
let node = result.iterateNext()
while (node) {
  console.log(node.textContent) // → "1984", "Dune"
  node = result.iterateNext()
}

// Get a numeric value
const sum = doc.evaluate('sum(//price)', doc, null, XPathResult.NUMBER_TYPE, null)
console.log(sum.numberValue) // → 20.98
Python (lxml)
from lxml import etree

xml = """<catalog>
  <book id="1"><title>1984</title><price>7.99</price></book>
  <book id="2"><title>Dune</title><price>12.99</price></book>
</catalog>"""

tree = etree.fromstring(xml.encode())

# Select elements by attribute
books = tree.xpath('//book[@id="1"]/title/text()')
print(books)  # → ['1984']

# Use predicates with position
first = tree.xpath('//book[1]/title/text()')
print(first)  # → ['1984']

# Boolean check
has_cheap = tree.xpath('boolean(//price[. < 10])')
print(has_cheap)  # → True
Java (javax.xml.xpath)
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.*;
import org.w3c.dom.*;

var factory = DocumentBuilderFactory.newInstance();
var builder = factory.newDocumentBuilder();
var doc = builder.parse(new java.io.File("catalog.xml"));

var xpath = XPathFactory.newInstance().newXPath();

// Select node set
NodeList titles = (NodeList) xpath.evaluate(
    "//book/title", doc, XPathConstants.NODESET
);
for (int i = 0; i < titles.getLength(); i++) {
    System.out.println(titles.item(i).getTextContent());
    // → "1984", "Dune"
}

// Evaluate to number
double total = (double) xpath.evaluate(
    "sum(//price)", doc, XPathConstants.NUMBER
);
System.out.println(total); // → 20.98
CLI (xmllint)
# Select all book titles
xmllint --xpath '//book/title/text()' catalog.xml
# → 1984Dune

# Select by attribute
xmllint --xpath '//book[@id="2"]/title' catalog.xml
# → <title>Dune</title>

# Count nodes
xmllint --xpath 'count(//book)' catalog.xml
# → 2

# Using xmlstarlet for formatted output
xmlstarlet sel -t -v '//book/title' -n catalog.xml
# → 1984
# → Dune

Questions fréquentes

Quelle est la différence entre XPath 1.0 et XPath 3.1 ?
La version 1.0 dispose de quatre types de données (ensemble de nœuds, chaîne, nombre, booléen) et de 27 fonctions. La version 3.1 ajoute les séquences, les maps, les tableaux, les types date/heure, les expressions régulières, les fonctions d'ordre supérieur et la prise en charge de JSON. Les navigateurs et la plupart des bibliothèques standard implémentent uniquement la version 1.0. La version 3.1 nécessite un moteur dédié comme Saxon.
Comment sélectionner des nœuds avec une valeur d'attribut spécifique ?
Utilisez un prédicat avec le raccourci @ pour l'axe des attributs. Par exemple, //book[@category="fiction"] sélectionne tous les éléments book dont l'attribut category est égal à "fiction". Vous pouvez combiner plusieurs prédicats : //book[@category="fiction"][@year > 2000].
Pourquoi mon XPath ne retourne aucun résultat alors que le XML contient des éléments correspondants ?
La cause la plus fréquente est les namespaces XML. Si votre XML déclare un namespace par défaut (xmlns="..."), les éléments appartiennent à ce namespace même sans préfixe. En version 1.0, vous devez enregistrer le namespace et utiliser un préfixe dans votre expression. En JavaScript côté navigateur, passez un résolveur de namespace comme troisième argument à document.evaluate().
XPath peut-il modifier le contenu XML ?
Non. C'est un langage de requête en lecture seule. Il sélectionne et évalue les nœuds, mais ne peut pas les insérer, les supprimer ni les mettre à jour. Pour modifier du XML, utilisez des transformations XSLT, des méthodes de manipulation DOM, ou une bibliothèque comme lxml en Python qui fournit des API distinctes pour l'édition.
Que signifie le double slash (//) en XPath ?
Le double slash est un raccourci pour l'axe descendant-or-self. L'expression //title signifie « sélectionner tous les éléments title n'importe où dans l'arbre du document, à n'importe quelle profondeur. » Elle est équivalente à la forme complète /descendant-or-self::node()/title. Utilisé au début d'une expression, // recherche dans l'ensemble du document ; utilisé en milieu de chemin (comme /catalog//title), il recherche parmi les descendants d'un nœud spécifique.
Comment sélectionner le contenu texte plutôt que le nœud élément ?
Ajoutez /text() à votre expression. Par exemple, //book/title/text() retourne le contenu texte de chaque élément title en tant que nœud texte, plutôt que le nœud élément lui-même. Dans le code, vous pouvez aussi accéder à .textContent sur le nœud élément retourné sans utiliser text().
XPath est-il plus rapide que les sélecteurs CSS pour interroger du XML ?
Les sélecteurs CSS sont optimisés pour le HTML et la traversée du DOM dans les navigateurs. XPath est plus expressif : il prend en charge la traversée des nœuds parents, les axes de fratrie, les prédicats numériques et des fonctions intégrées que les sélecteurs CSS ne peuvent pas exprimer. Pour le HTML, les sélecteurs CSS (querySelector) sont généralement plus rapides. Pour le XML, la plupart des bibliothèques côté serveur n'exposent que XPath — les sélecteurs CSS ne sont pas une option du tout.