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
| Symbole | Signification |
|---|---|
/ | 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
/WebInfos
Récupérer le nœud de plus haut niveau<WebInfos>depuis la racine/WebInfos/WebInfo[1]
Récupérer le 1ᵉʳ nœud<WebInfo>→ enregistrement FoxDevelop
⚠️ Les index XPath commencent à 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)/WebInfos/WebInfo[Age>5]/Name
À partir du filtre précédent, extraire les nœuds fils<Name>/WebInfos/WebInfo[last()]
Fonctionlast(): récupérer le dernier WebInfo → microsoft/WebInfos/WebInfo[last()-1]
Récupérer l’avant‑dernier WebInfo → google/WebInfos/WebInfo[position()<3]position()renvoie le rang du nœud ; correspond aux rangs inférieurs à 3 → deux premiers éléments (FoxDevelop, google)//IP[@type='ipv4']//recherche globale ; filtrer les nœuds<IP>dont l’attributtypevautipv4//@type
Récupérer tous les attributs nomméstypedu document//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
Previous: Présentation
Next: Cas d’usage