Apprendre XPath

Découvrez les fondamentaux de XPath pour extraire efficacement des données de documents XML et HTML pour vos projets SEO.

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 (maps et arrays), 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.