1. Was ist XPath
XPath (XML Path Language) ist eine Pfadsprache für XML. Aufgabe:
Mit Pfadausdrücken werden Knoten, Knotentexte und Knotenattribute in XML/HTML‑Dokumenten abgefragt, bedingte Filterung ist möglich.
Wichtiger Hinweis: HtmlAgilityPack wandelt HTML‑Dokumente in eine XML‑ähnliche DOM‑Struktur um, damit lassen sich Web‑Inhalte direkt mit XPath auslesen.
2. Referenz‑Beispiel 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>Code-Sprache: HTML, XML (xml)
3. XPath‑Syntax im Detail
Grundlegende Zeichenerklärung
| Zeichen | Bedeutung |
|---|---|
/ | Suche ab dem Wurzelknoten beginnen;Hierarchie‑Trennzeichen |
// | Suche überall im Dokument, ohne Hierarchiebeschränkung |
[] | Filter‑Bedingungen, Index. Indizes beginnen bei 1 (nicht 0) |
@ | Übereinstimmung mit Element‑Attributen |
Beispiele Schritt‑für‑Schritt
/WebInfos
Hole den obersten Knoten<WebInfos>ausgehend von der Wurzel/WebInfos/WebInfo[1]
Hole den ersten<WebInfo>‑Knoten → FoxDevelop‑Eintrag
⚠️ XPath‑Indizes starten bei 1
/WebInfos/WebInfo[Age>5]
Filtere WebInfo‑Knoten, bei denen der Kindknoten<Age>größer als 5 ist
Treffer: google (23), microsoft (13)/WebInfos/WebInfo[Age>5]/Name
Extrahiere aus obigem Filter die Kindknoten<Name>/WebInfos/WebInfo[last()]
Funktionlast():hole den letzten WebInfo‑Eintrag → microsoft/WebInfos/WebInfo[last()-1]
Hole den vorletzten WebInfo‑Eintrag → google/WebInfos/WebInfo[position()<3]position()liefert Knotenposition;treffe auf Position kleiner 3 → die ersten zwei Einträge (FoxDevelop, google)//IP[@type='ipv4']//globale Suche;filtere<IP>‑Knoten mit Attributtypegleichipv4//@type
Hole alle Attribute namenstypeim gesamten Dokument//WebInfo
Suche alle<WebInfo>‑Knoten im Dokument, unabhängig von der Verschachtelungstiefe
4. Nützliche erweiterte Ausdrücke
//Name/text() # Textinhalt des Name‑Tags ermitteln
//WebInfo[Name="FoxDevelop"] # Knoten anhand Textinhalt auswählen
//IP/@type # Wert des type‑Attributs vom IP‑Tag lesenCode-Sprache: JSON / JSON mit Kommentaren (json)
5. Einsatz mit HtmlAgilityPack
var doc = new HtmlDocument();
doc.Load("demo.xml");
# Alle Site‑Namen mit Age>5 auswählen
var nodes = doc.DocumentNode.SelectNodes(@"/WebInfos/WebInfo[Age>5]/Name");
foreach(var node in nodes)
{
Console.WriteLine(node.InnerText);
}Code-Sprache: PHP (php)
XPath
Previous: Einführung
Next: Anwendungsfall