araç köşesi

Testeur XPath

Essayez une expression XPath 1.0 sur le XML que vous collez ; voyez les éléments, les attributs ou le résultat de count()

Vos données restent chez vous. La conversion se fait dans le navigateur ; rien n'est envoyé à un serveur.

Comment ça marche

XPath est le langage qui sert à sélectionner des éléments, des attributs ou du texte dans un document XML ; les tests Selenium, les transformations XSLT et les programmes qui lisent des factures électroniques en XML l'utilisent. Collez le XML à gauche et écrivez l'expression : le résultat se met à jour à droite pendant la saisie. Dans le document d'exemple, //livre[prix<10]/titre donne les titres des deux livres à moins de 10 : L'Étranger et Le Passé simple. Chaque nœud trouvé s'affiche sur sa propre ligne : un élément en XML, un attribut sous la forme nom="valeur", un texte choisi avec text() en texte brut. Une expression qui renvoie un nombre (count(//livre) donne 3), un texte (string()) ou vrai/faux (//annee=1956 donne true) affiche une seule valeur, et la note sous le résultat en précise le type. Les prix s'écrivent avec un point (8.90) : XPath ne lit pas 8,90 comme un nombre. Si le document déclare des préfixes comme xmlns:cbc, écrivez-les tels quels (//cbc:ID). Si le XML est mal formé, la ligne et la colonne du problème sont indiquées.

Cet outil est aussi connu sous le nom de testeur xpath, xpath tester, xpath en ligne, exemple xpath, expression xpath.

Qu'est-ce que XPath ?

XPath (XML Path Language) est le standard du W3C qui sélectionne des nœuds d'un document XML par une expression de chemin. Un chemin comme /librairie/livre choisit des éléments, @categorie des attributs, text() du texte ; une condition entre crochets filtre le résultat. XSLT, XQuery, Selenium et de nombreuses bibliothèques XML l'utilisent ; les navigateurs prennent en charge la version 1.0, publiée en 1999.

Qu'est-ce que Espace de noms XML ?

Un espace de noms (namespace) indique par une adresse à quel vocabulaire appartient un élément, pour distinguer des éléments qui portent le même nom. La déclaration xmlns:cbc="urn:..." rattache à cette adresse tous les éléments préfixés par cbc:. Les factures électroniques au format UBL et les messages SOAP en utilisent beaucoup. En XPath, l'espace de noms doit correspondre en plus du nom : c'est pourquoi on écrit aussi le préfixe dans l'expression.

Quelle est la différence entre XPath et un sélecteur CSS ?

Un sélecteur CSS (div.produit > a) ne choisit que des éléments et avance vers le bas du document ; il suffit pour styler une page et pour trouver un élément dans Selenium. XPath peut aussi choisir des attributs et des nœuds texte, remonter au parent (..) ou vers les éléments voisins, filtrer selon le texte (//a[text()='Ajouter au panier']) et calculer avec count() ou sum(). Pour extraire des valeurs d'un XML ou trouver un élément d'après son texte, prenez XPath ; pour simplement choisir des éléments dans du HTML, un sélecteur CSS est plus court.

Expressions XPath courantes (avec le XML d'exemple)

Les expressions ci-dessous ont été lancées sur la librairie d'exemple de la page ; le résultat indiqué est celui que l'outil affiche. Une barre oblique descend d'un niveau, deux barres cherchent à tous les niveaux ; les crochets posent une condition, @ désigne un attribut.

  • //titre → les trois éléments titre
  • //livre[prix<10]/titre/text() → L'Étranger et Le Passé simple, en texte seul
  • //livre[auteur='Albert Camus']/annee/text() → 1942
  • /librairie/livre[last()]/titre → le titre du dernier livre (Le Passé simple)
  • count(//livre) → 3 ; sum(//prix) → 30.9
  • //titre/@langue → les attributs langue (langue="fr")

Espaces de noms et limites honnêtes

Les espaces de noms à préfixe (xmlns:cbc="...") sont lus dans la déclaration du document et s'utilisent avec le même préfixe dans l'expression. L'espace de noms par défaut sans préfixe (xmlns="...") est le piège connu de XPath 1.0 : //livre ne trouve alors rien. Dans ce cas, l'outil associe l'espace de noms par défaut au préfixe d: ; écrivez //d:livre ou //*[local-name()='livre']. Quand rien n'est trouvé, la note sous le résultat le rappelle.

L'outil exécute XPath 1.0, la version que les navigateurs prennent aussi en charge. Les fonctions de XPath 2.0 et 3.1 (matches, lower-case, tokenize, fonctions de date) n'existent pas ; si vous en écrivez une, l'outil nomme la fonction manquante. Le texte collé doit être un XML bien formé : un HTML ordinaire avec un <br> non fermé ou un attribut sans guillemets provoque une erreur. Pour tester XPath sur une page web en ligne, utilisez la commande $x("//a") dans les outils de développement du navigateur.

Questions fréquentes

Comment tester une expression XPath ?

Collez le XML dans le panneau de gauche de cette page et écrivez l'expression dans la case XPath. Les éléments trouvés s'affichent aussitôt à droite, et le nombre de nœuds est indiqué en dessous. Si l'expression contient une faute de syntaxe ou une fonction absente de XPath 1.0, l'outil le dit clairement.

Quelle est la différence entre // et / ?

Une barre oblique regarde les enfants directs de l'endroit où l'on se trouve : /librairie/livre choisit seulement les éléments livre placés sous la racine. Deux barres cherchent à tous les niveaux : //auteur trouve tous les éléments auteur, où qu'ils soient dans le document. Si vous ne connaissez pas bien la structure, commencez par //.

Pourquoi XPath ne trouve-t-il rien dans un XML avec espace de noms ?

Si le document déclare un espace de noms par défaut avec xmlns="...", la règle de XPath 1.0 veut qu'un //livre sans préfixe ne voie pas les éléments de cet espace. Sur cet outil, écrivez //d:livre, ou utilisez //*[local-name()='livre'], qui ignore l'espace de noms. Pour un préfixe déclaré comme xmlns:cbc, il suffit d'écrire le préfixe du document.

Mon XML est-il envoyé à un serveur ?

Non. La lecture du XML et l'exécution de l'expression XPath se font entièrement dans votre navigateur ; vous pouvez tester un document qui contient une facture ou des données clients.