XPath

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
ZeichenBedeutung
/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
  1. /WebInfos
    Hole den obersten Knoten <WebInfos> ausgehend von der Wurzel
  2. /WebInfos/WebInfo[1]
    Hole den ersten <WebInfo>‑Knoten → FoxDevelop‑Eintrag

⚠️ XPath‑Indizes starten bei 1

  1. /WebInfos/WebInfo[Age>5]
    Filtere WebInfo‑Knoten, bei denen der Kindknoten <Age> größer als 5 ist
    Treffer: google (23), microsoft (13)
  2. /WebInfos/WebInfo[Age>5]/Name
    Extrahiere aus obigem Filter die Kindknoten <Name>
  3. /WebInfos/WebInfo[last()]
    Funktion last():hole den letzten WebInfo‑Eintrag → microsoft
  4. /WebInfos/WebInfo[last()-1]
    Hole den vorletzten WebInfo‑Eintrag → google
  5. /WebInfos/WebInfo[position()<3]
    position() liefert Knotenposition;treffe auf Position kleiner 3 → die ersten zwei Einträge (FoxDevelop, google)
  6. //IP[@type='ipv4']
    // globale Suche;filtere <IP>‑Knoten mit Attribut type gleich ipv4
  7. //@type
    Hole alle Attribute namens type im gesamten Dokument
  8. //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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert