Wie greife ich auf den Inhalt von mehreren zu?
Tags mit HTMLAgilityPack?

c# html html-agility-pack wpf

Frage

Ich kann die Dokumentation für das HTMLAgilityPack auf der Codeplex-Website nicht finden. Derzeit möchte ich auf der Amazon-Website auf ein div zugreifen und Textinformationen für die Verwendung in einer WPF-Anwendung extrahieren.

var getWeb = new HtmlWeb();                     
var doc = getWeb.Load(uri);
HtmlNode ourNode = doc.DocumentNode.SelectSingleNode("//div[@id = 'zg_centerListWrapper']");

Dieses div enthält ungefähr 12 andere divs, jedes ist ein Artikel in der best sellers Kategorie.

Um auf die Eigenschaften eines jeden zugreifen zu können, wäre das mühsam (und ich bin mir auch nicht ganz sicher, wie ich es auf den ersten Blick machen würde). Soll ich stattdessen DocumentNode.SelectNodes() ? Und wie würde ich es umsetzen? Ich finde es auch schwer zu glauben, dass es nach dieser Zeit keine Dokumentation für das HTMLAgilityPack ... Vielleicht schaue ich an die falschen Stellen, weil youtube im Moment meine beste Quelle zu sein scheint.

Akzeptierte Antwort

Tatsächlich ist der Parameter von SelectNodes() und SelectSingleNode() ein xpath-Ausdruck , genauer xpath Version 1.0 (siehe xpath 1.0 spec hier ).

XPath ist eine weitere Technologie mit eigener Spezifikation, Dokumentation und Diskussion. Im Allgemeinen können Sie anstelle von HtmlAgilityPack (HAP) -Spezifikationen nach xpath-Tutorials oder -Artikeln suchen, um eine bessere Vorstellung davon zu bekommen, welche Art von Ausdruck Sie an HAP übergeben sollten, um bestimmte HTML-Elemente zu erhalten.

Nehmen Sie zum Beispiel an, dass Ihr HTML wie folgt aussieht:

<div id="zg_centerListWrapper">
    <div>I want this</div>
    <div>..and this</div>
    <div>..and this one too</div>
</div>

Sehen Sie, dass div s, an denen Sie interessiert sind, direkte Kinder des div[@id = 'zg_centerListWrapper'] , dann können Sie den folgenden xpath verwenden, um sie zu erhalten:

var xpath = "//div[@id = 'zg_centerListWrapper']/div";
HtmlNodeCollection ourNodes = doc.DocumentNode.SelectNodes(xpath);

Beliebte Antwort

Sie können DocumentNode.Descendants("div") und etwas ähnliches verwenden

.Where(div => div.Attributes.Contains("class") && div.Attributes["class"].Value.Contains("best category"))

Aber ja, Dokumentation würde sicherlich helfen ..



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