Wie bekomme ich alle divs IDs auf einer HTML-Seite mit Html Agility Pack. Ich versuche, alle Ids zu bekommen und sie in eine Sammlung zu legen.
<p>
<div class='myclass1'>
<div id='f'>
</div>
<div id="myclass2">
<div id="my"><div id="h"></div><div id="b"></div></div>
</div>
</div>
</p>
Code:
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags=true;
htmlDoc.Load(filePath);
HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("div");
Wie bekomme ich die Sammlung aller Divs-IDs?
Wenn Sie nur die IDs möchten, können Sie eine Sammlung dieser id
Attributknoten abrufen, anstatt eine Auflistung der div
Elementknoten zu erhalten. Zum Beispiel:
List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
ids.Add(node.InnerText);
}
Dadurch werden die div
Elemente <div class='myclass1'>
, die keine ID haben, wie z. B. das Element <div class='myclass1'>
in Ihrem Beispiel.
"//div/@id"
ist eine XPath-Zeichenfolge. XPath ist eine Technologie, die sehr praktisch ist, wenn Sie viel mit XML oder in diesem Fall mit HTML über die Agility Pack-Bibliothek arbeiten. XPath ist ein Industriestandard, mit dem Sie übereinstimmende Knoten in einem XML-Dokument auswählen können.
//
bedeutet, dass Sie den folgenden Knoten als untergeordneten Knoten des aktuellen Knotens oder in einem seiner Nachkommen auswählen möchten. Da der aktuelle Knoten der Stammknoten des Dokuments ist, werden übereinstimmende Knoten an beliebiger Stelle im Dokument gefunden. div
ist ein Elementname, den wir zuordnen möchten. Also sagen wir in diesem Fall, dass alle div
Elemente irgendwo im Dokument zu finden sind. /
zeigt an, dass Sie einen untergeordneten Knoten haben möchten. In diesem Fall ist das Attribut id
ein Kind des Elements div
Zuerst sagen wir, dass wir das Element div
wollen, dann brauchen wir den Schrägstrich, um zu sagen, dass wir einen der div
Knoten des div
Elements haben wollen. @id
bedeutet, dass wir alle id
Attribute finden möchten. Das @
-Zeichen gibt an, dass es sich um einen Attributnamen anstelle eines Elementnamens handelt. Yo kann die Sammlung von div erhalten, indem Xpath-Syntax übergeben
So was
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
htmlDoc.OptionFixNestedTags=true;
htmlDoc.Load(filePath);
foreach(HtmlNode div doc.DocumentElement.SelectNodes("//div"))
{
///.. code here
}