Dokument‑Objekt abrufen
1. Dokument‑Objekt erstellen
HtmlDocument document = new HtmlDocument();Code-Sprache: JavaScript (javascript)
2. Zwei Lademöglichkeiten
1)HTML‑String laden
document.LoadHtml(htmlString);Code-Sprache: JavaScript (javascript)
2)Lokale HTML‑Datei laden (Kodierung festlegen, um Zeichenfehler zu vermeiden)
document.Load(@"c:/news.html", Encoding.UTF8);Code-Sprache: JavaScript (javascript)
Bei Windows‑Pfaden empfehlt sich das Zeichen
@zum Deaktivieren der Escape‑Verarbeitung.c://news.htmlim Lehrmaterial ist nur ein Syntaxbeispiel.
3. Wurzelknoten erhalten
HtmlNode rootNode = document.DocumentNode;Code-Sprache: JavaScript (javascript)
Alle XPath‑Abfragen werden auf Basis von rootNode ausgeführt.
Knoten‑Operationen
1. Neuen Knoten aus Knoten‑HTML erzeugen
HtmlNode newNode = HtmlNode.CreateNode(newsNode.OuterHtml);
OuterHtml: Enthält das eigene Tag sowie den gesamten internen HTML‑Inhalt- Wird oft zum Kopieren von Knoten oder zum separaten Auswerten von HTML‑Ausschnitten verwendet
2. Knoten abfragen
SelectSingleNode("XPath"): Gibt den ersten passenden Knoten zurück, RückgabetypHtmlNode
HtmlNode childNode = itemNode.SelectSingleNode("//div[1]");Code-Sprache: JavaScript (javascript)
SelectNodes("XPath"): Gibt alle passenden Knoten zurück, RückgabetypHtmlNodeCollection
3. Text und Attribute auslesen
- Reinen Text innerhalb eines Knotens auslesen
string text = itemNode.InnerText;
- Tag‑Attribut abrufen (einfache Schreibweise)
string href = itemNode.Attributes["href"].Value;Code-Sprache: JavaScript (javascript)
Risiko: Fehlt das Attribut
hrefam Tag, liefert der direkte ZugriffAttributes["href"]null und löst einen Programmfehler aus.
Empfohlene sichere Schreibweise:
string href = itemNode.GetAttributeValue("href", "");Code-Sprache: JavaScript (javascript)
4. Vollständiges Beispiel: Nachrichtenliste durchlaufen
foreach (HtmlNode item in newsList)
{
string title = item.InnerText;
string href = item.Attributes["href"].Value;
}Code-Sprache: PHP (php)
Zusätzliche Hinweise
- Umgang mit Null‑Werten
SelectNodes()gibtnullzurück, wenn keine Knoten gefunden werden. Vor einer foreach‑Schleife ist eine Prüfung zwingend erforderlich:
if(newsList != null)
{
foreach(var item in newsList){ ... }
}Code-Sprache: PHP (php)
- Unterschied InnerText / InnerHtml / OuterHtml
InnerText: Extrahiert nur Textinhalt, entfernt sämtliche TagsInnerHtml: HTML‑Inhalt innerhalb des Knotens, ohne das eigene TagOuterHtml: Eigenes Tag plus den gesamten internen HTML‑Inhalt
- Kleiner XPath‑Tipp
//divsucht global nach allen div‑Elementen; ohne//werden nur direkte Kindknoten abgeglichen.
Vollständiges Code‑Beispiel
using HtmlAgilityPack;
using System.Text;
//1.Dokument initialisieren
HtmlDocument document = new HtmlDocument();
document.Load("news.htm", Encoding.UTF8);
HtmlNode rootNode = document.DocumentNode;
//2.Massenabfrage von Nachrichten‑Links
HtmlNodeCollection newsList = rootNode.SelectNodes(@"//div[@class='blk122']/a");
if(newsList != null)
{
foreach (HtmlNode item in newsList)
{
string title = item.InnerText.Trim();
string link = item.GetAttributeValue("href", "");
Console.WriteLine($"Titel: {title} Link: {link}");
}
}Code-Sprache: JavaScript (javascript)
Dokumentinhalt abrufen
Previous: Anwendungsfall