Holen Sie sich alle Divs-IDs auf einer HTML-Seite mit Html Agility Pack

c# html-agility-pack

Frage

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?

Akzeptierte Antwort

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.

Beliebte Antwort

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
 }



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum