XPath est un langage permettant d'identifier et d'extraire des éléments spécifiques d'un document XML. C'est une sorte d'adresse permettant d'accéder à un contenu précis (exemple : récupérer le contenu de la balise **h1**)
Où utiliser XPath ?
- Crawlers SEO : Screaming Frog, Botify, OnCrawl.
- Navigateur : Extensions comme "Scraper".
- Code : En Python, JavaScript, etc.
XPath ou Regex
- Regex : Fonctionne sur du texte brut, indépendamment du langage.
- XPath : Comprend la structure XML et le DOM (Document Object Model), ce qui permet d'exploiter les relations parent/enfant. Ainsi, il est bien plus performant que les regex pour récupérer du contenu dans un document XML, car il navigue dans la structure plutôt que de chercher des motifs textuels.
Qu'est-ce que le XML ?
Le XML (eXtensible Markup Language) est un langage de balisage utilisé pour structurer des données de manière hiérarchique. Il est basé sur une structure en nœuds, avec des relations parent/enfant.
Notions clés du XML
- Balise (Tag) : Élément délimitant une donnée.
- Attribut : Information supplémentaire attachée à une balise.
- Valeur : Contenu d'une balise.
- Nœud parent : Élément englobant un ou plusieurs sous-éléments.
- Nœud enfant : Élément contenu dans un nœud parent.
Exemple de XML :
<films>
<film>
<titre lang="us">Matrix</titre>
<realisation>Lana Wachowski, Lilly Wachowski</realisation>
<date>23 juin 1999</date>
<note>9.5</note>
</film>
<film>
<titre lang="fr">Watchmen : Les Gardiens</titre>
<realisation>Zack Snyder</realisation>
<date>23 février 2009</date>
<origine>Comics</origine>
<note>7</note>
</film>
</films>
Exemples de standards XML
- HTML5 : Version actuelle du HTML.
- Flux RSS : Format de diffusion d'actualités.
- SOAP : Protocole pour les services web.
Apprendre XPath
Bases
| Syntaxe | Explication | Exemple |
|---|---|---|
/ |
Racine du document | /films sélectionne la racine <films> |
/films/film/titre |
Accès direct à un nœud | Retourne tous les titres de films |
/tag/@attribut |
Récupérer la valeur d'un attribut | /films/film/titre/@lang renvoie us, fr |
//titre |
Sélectionner tous les <titre> |
//titre extrait tous les titres de films (Watchmen..) |
. |
Nœud courant | Sélectionne l'élément actuel |
.. |
Nœud parent | Sélectionne l'élément parent |
Conditions
| Syntaxe | Explication | Exemple |
|---|---|---|
//titre[2] |
Deuxième élément <h2> |
Sélectionne le deuxième <titre> trouvé |
//titre[@lang='us'] |
<titre> avec lang='us' |
Retourne Matrix |
//titre[@lang='us'][2] |
Deuxième <titre> avec cette condition |
Aucun résultat dans notre exemple |
Fonctions utiles
| Fonction | Explication | Exemple |
|---|---|---|
contains(xpath, string) |
Vérifie la présence d'une chaîne | //titre[contains(., 'Matrix')] trouve Matrix |
count(xpath) |
Nombre d'éléments trouvés | count(//film) renvoie 2 |
sum(xpath) |
Somme des valeurs numériques | sum(//note) additionne les valeurs trouvées dans toutes les balises <note> |
string-length(xpath) |
Longueur d'une chaîne | string-length(/titre[1]) renvoie la longueur du premier titre |
round(xpath) |
Arrondi une valeur | round(//note[1]) arrondit la première note |
lower-case()/upper-case() |
Minuscule/Majuscule | lower-case(//titre[1]) met en minuscule |
last() |
Dernier élément | //film[last()]/date sélectionne la date du dernier film |
Opérateurs
Il est aussi possible d'utiliser des opérateurs numérique.
Exemple :
//h2[string-length(.)>=10] : sélectionne les <h2> avec au moins 10 caractères.
Utilisation de regex dans XPath
Il est possible d'utiliser replace() pour appliquer une regex sur un contenu cible :
//date[replace(., ".*(\d{4}).*", "$1")]
Cela extrait uniquement l'année de la date.
Pour allez plus loin, vous pouvez consulter la [documentation Mozilla](https://developer.mozilla.org/en-US/docs/Web/XML/XPath/Reference/Functions) qui liste l'ensemble des fonctions utilisables.
Versions XPath
Il existe différentes versions de XPath, chacune apportant des évolutions significatives :
- XPath 1.0 : Version initiale, largement supportée mais avec un jeu de fonctions limité.
- XPath 2.0 : Cette version a étendu considérablement les fonctionnalités, notamment en termes de manipulation des données et d'opérations sur les types.
- XPath 3.0 et 3.1 : Ajout de nouvelles fonctionnalités comme les tableaux et les cartes (
mapsetarrays), permettant une meilleure prise en charge du JSON.
Pour un aperçu détaillé des changements, vous pouvez consulter les journaux de révision des spécifications :
**Assurez-vous que l'outil que vous utilisez supporte bien la version XPath nécessaire pour vos requêtes avancées.** Certains moteurs XML ne prennent en charge que XPath 1.0, limitant ainsi les fonctionnalités disponibles.