Schleife alle Nachkommen eines Knotens durch und inspiziere sie einzeln

c# html-agility-pack linq xpath

Frage

Ich muss eine Liste der Datensätze auf einer bestimmten Webseite erstellen. Ich habe die Seitenquelle in einer Textdatei gespeichert. Ich muss diesen Knoten Element für Element durchqueren:

HtmlNodeCollection resultContainer = doc.DocumentNode.SelectNodes("//div[@class='result-list divider-y-5']");

Für jedes Element muss ich den Typ (div, span usw.) überprüfen, es ist "id" und es sind "class" -Attribute, um meine Liste von Datensätzen erstellen zu können. Ich möchte keine Sammlung aller s oder s. Das hilft nicht, weil ich nicht weiß, welcher Art von Element ich beim Durchlaufen begegnen werde. Ich muss sie alle überprüfen. Weil alle Daten, die ich brauche, Kinder der oben erwähnten Knotensammlung sind. Irgendwelche Vorschläge?

Akzeptierte Antwort

foreach(HtmlNode node in resultContainer)
{
    //check node type
    switch(node.Name)
    {
        case "div":
        {
            break;
        }   
        case "p":
        {
        }
        ///....etc
    }

    //get id
    String id = node.Attributes["id"].Value;

    //get class
    String class = node.Attributes["class"].Value;

}

Beliebte Antwort

Ich denke, es ist einfacher, das HtmlAgilityPack das HTML-Dokument in XML konvertieren zu lassen, zB:

doc.Load(htmlStream, true);
doc.OptionOutputAsXml = true;
doc.OptionFixNestedTags = true;
doc.OptionAutoCloseOnEnd = true;
doc.Save(/* your Xml stream or filename */);

Verwenden Sie dann die reguläre .NET-XML-API (z. B. mit XmlDocument oder XDocument), um den Inhalt zu verarbeiten.



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