XPath

1. Qu’est‑ce que XPath

XPath (XML Path Language) est un langage de chemin dédié au XML. Son rôle :
Grâce aux expressions de chemin, interroger les nœuds, le texte des nœuds et les attributs des nœuds dans des documents XML/HTML, avec prise en charge du filtrage par conditions.

Point clé : HtmlAgilityPack transforme un document HTML en DOM XML‑like, donc XPath permet d’extraire le contenu des pages web.

2. Exemple de référence XML

<?xml version="1.0" encoding="utf-8"?>
<WebInfos>
    <WebInfo>
        <Name>FoxDevelop</Name>
        <Domain>https://foxdevelop.com</Domain>
        <IP type="ipv4">127.0.0.1</IP>
        <Age>1</Age>
    </WebInfo>
    <WebInfo>
        <Name>google</Name>
        <Domain>https://www.google.com</Domain>
        <IP type="ipv4">95.0.0.1</IP>
        <Age>23</Age>
    </WebInfo>
    <WebInfo>
        <Name>microsoft</Name>
        <Domain>https://www.microsoft.com</Domain>
        <IP type="ipv4">192.186.0.1</IP>
        <Age>13</Age>
    </WebInfo>
</WebInfos>Langage du code : HTML, XML (xml)

3. Détail de la syntaxe XPath

Présentation des symboles de base
SymboleSignification
/Lancer la recherche depuis le nœud racine ; sépare les niveaux de hiérarchie
//Chercher partout dans le document, sans contrainte de hiérarchie
[]Conditions de filtre, index ; les index commencent à 1 (pas 0)
@Cibler les attributs des balises
Analyse pas à pas des exemples
  1. /WebInfos
    Récupérer le nœud de plus haut niveau <WebInfos> depuis la racine
  2. /WebInfos/WebInfo[1]
    Récupérer le 1ᵉʳ nœud <WebInfo> → enregistrement FoxDevelop

⚠️ Les index XPath commencent à 1

  1. /WebInfos/WebInfo[Age>5]
    Filtrer les nœuds WebInfo dont la valeur du fils <Age> est supérieure à 5
    Correspondances : google (23), microsoft (13)
  2. /WebInfos/WebInfo[Age>5]/Name
    À partir du filtre précédent, extraire les nœuds fils <Name>
  3. /WebInfos/WebInfo[last()]
    Fonction last() : récupérer le dernier WebInfo → microsoft
  4. /WebInfos/WebInfo[last()-1]
    Récupérer l’avant‑dernier WebInfo → google
  5. /WebInfos/WebInfo[position()<3]
    position() renvoie le rang du nœud ; correspond aux rangs inférieurs à 3 → deux premiers éléments (FoxDevelop, google)
  6. //IP[@type='ipv4']
    // recherche globale ; filtrer les nœuds <IP> dont l’attribut type vaut ipv4
  7. //@type
    Récupérer tous les attributs nommés type du document
  8. //WebInfo
    Rechercher tous les nœuds <WebInfo> du document quel que soit leur niveau d’imbrication

4. Formules utiles étendues

//Name/text()              # Récupérer le texte interne de la balise Name
//WebInfo[Name="FoxDevelop"]     # Cibler un nœud par son contenu textuel
//IP/@type                 # Lire la valeur de l’attribut type sur la balise IPLangage du code : JSON / JSON avec commentaires (json)

5. Utilisation avec HtmlAgilityPack

var doc = new HtmlDocument();
doc.Load("demo.xml");

// Sélectionner les noms des sites dont Age>5
var nodes = doc.DocumentNode.SelectNodes(@"/WebInfos/WebInfo[Age>5]/Name");
foreach(var node in nodes)
{
    Console.WriteLine(node.InnerText);
}Langage du code : PHP (php)

XPath

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *