Testeur XPath

Testez des expressions XPath en ligne sur votre XML et voyez chaque nœud trouvé, avec son chemin et sa ligne. Tout se passe dans votre navigateur : votre XML n'est jamais envoyé.

Le testeur XPath fonctionne entièrement dans votre navigateur et a besoin de JavaScript. Le reste de cette page fonctionne sans. Autres solutions : xmllint --xpath en ligne de commande, ou la bibliothèque lxml en Python.

Essayez :

Collez du XML, déposez un fichier ou chargez l'exemple. Les fichiers sont lus dans votre navigateur : rien n'est envoyé.

Résultat

XPath 1.0, évalué par votre navigateur. Voir dans l'entrée sélectionne un résultat dans votre XML.

Les nœuds ou la valeur que sélectionne votre expression s'afficheront ici.

Cet outil vous a aidé ? Soutenir XMLNest

Une expression d'exemple sélectionne les titres des livres en français, et « Show in input » met l'un d'eux en évidence dans le XML. Ensuite, //book ne trouve rien, car le XML a un espace de noms par défaut : la correction proposée, //d:book, trouve les 4 livres. (24 secondes, sans son, interface en anglais)

Comment tester une expression XPath ?

Collez votre XML à gauche, ou déposez-y un fichier. Tapez une expression dans le champ XPath et appuyez sur Enter ou sur Évaluer. Chaque nœud trouvé s'affiche avec son type, un chemin court comme /catalog/book[2]/title, sa ligne et son contenu. Voir dans l'entrée sélectionne ce nœud dans votre XML. Une fonction comme count() donne plutôt un nombre, que le résultat affiche. Copier et Télécharger donnent le résultat en texte brut. Charger l'exemple ouvre un catalogue de livres à essayer tout de suite.

Pourquoi mon expression ne renvoie-t-elle rien ?

Neuf fois sur dix, à cause d'un espace de noms. Quand l'élément racine porte xmlns="…", chaque élément sans préfixe appartient à cet espace de noms par défaut, et un simple //book ne le trouve plus. Ce testeur donne à l'espace de noms par défaut le préfixe d, ou celui que vous choisissez sous Espaces de noms, et propose l'expression corrigée quand il repère le problème. Autres causes fréquentes : une faute de frappe dans un nom, car XML distingue majuscules et minuscules, ou un @ oublié devant un attribut.

Exemples d'expressions à essayer

//book/title liste tous les titres. //book[@lang='en'] garde les livres dont l'attribut lang vaut en. count(//book) les compte, et sum(//price) additionne les prix. //title[contains(., 'Dark')] trouve les titres qui contiennent un mot, et //book[last()] prend le dernier livre. Pour sélectionner l'attribut lui-même, écrivez //book/@id. Le test text() renvoie des nœuds texte, alors que string() renvoie tout le texte d'un élément.

Quelle version de XPath cet évaluateur prend-il en charge ?

XPath 1.0, la version intégrée à tous les navigateurs, avec ses 27 fonctions. XPath 2.0 et 3.1 ne sont pas pris en charge : lower-case(), matches() ou if … then … else donnent un message clair, souvent avec une solution en 1.0. Les mêmes expressions fonctionnent dans une feuille de style XSLT 1.0 : essayez-les dans le testeur XSLT. Si votre XML contient une erreur de syntaxe, le testeur affiche d'abord sa ligne, comme le fait le validateur XML.

Cet outil envoie-t-il mon XML ?

Non. L'expression est évaluée dans cet onglet du navigateur, et les règles de sécurité de cette page bloquent les requêtes réseau. Rien n'est enregistré : fermez l'onglet et votre XML disparaît. Pour rendre d'abord lisible un long fichier écrit sur une seule ligne, utilisez le formateur XML.

Questions

Pourquoi //book ne trouve-t-il rien alors que mon XML contient des éléments book ?

Votre XML a sans doute un espace de noms par défaut, écrit xmlns="…" sur la racine. En XPath 1.0, un nom sans préfixe ne correspond qu'aux éléments sans espace de noms. Ce testeur donne un préfixe à l'espace de noms par défaut, d au départ : écrivez donc //d:book.

Puis-je utiliser des fonctions XPath 2.0 ou 3.1 ?

Non. Les navigateurs intègrent XPath 1.0, et ce testeur utilise le moteur du navigateur. Des fonctions comme lower-case() ou matches() renvoient un message clair, souvent avec une façon d'obtenir le même résultat en XPath 1.0.

Quelle est la différence entre text() et string() ?

text() sélectionne les nœuds texte placés directement dans un élément : vous obtenez des nœuds. string() renvoie le texte de tout l'élément, enfants compris, en une seule valeur.

Comment compter ou filtrer des nœuds ?

count(//item) donne un nombre. //item[contains(@name, 'pro')] garde les éléments dont l'attribut name contient pro. //item[position() <= 3] garde les trois premiers, et //item[last()] le dernier.

Quelle taille peut faire mon XML ?

Jusqu'à 10 Mo. La liste affiche les 500 premiers résultats, et Copier ou Télécharger les donnent tous en texte brut.

Mon XML est-il envoyé quelque part ?

Non. L'expression s'exécute dans cet onglet du navigateur, et la page n'a pas le droit d'envoyer de requêtes réseau. Fermez l'onglet et votre XML disparaît.