Comment utiliser XPath pour trouver des données dans du XML
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 & 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
- Ouvrez le testeur XPath. Cliquez sur Exemple pour charger la librairie ci-dessus, ou collez votre propre XML ou ouvrez un fichier.
- 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.
- 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.//titletrouve les titres où qu’ils soient.@désigne un attribut :@idest 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 → 2sum(//price): le total de tous les prix → 54.45boolean(//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
- XML en JSON et XML en CSV : convertir tout le fichier une fois que vous savez ce qu’il contient. Voir aussi comment convertir du XML en JSON.
- Formateur XML : rendre d’abord lisible un fichier sur une seule ligne. Le testeur n’accepte que du XML bien formé ; voir comment formater et valider du 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.
Autres articles
- Comment convertir du XML en JSON : attributs, tableaux et types
- Comment convertir du JSON en CSV pour Excel et Google Sheets
- Comment convertir des images en PDF : un seul fichier, à la bonne taille
- Qu’est-ce que le balisage schema ? Un guide simple du JSON-LD
- Comment créer un QR code qui fonctionne (gratuit, sans expiration ni inscription)