Der HTMLAgilityPack-ChildNodes-Index funktioniert, der benannte Knoten nicht

html-agility-pack selectsinglenode

Frage

Ich analysiere eine XML-API-Antwort mit HTMLAgilityPack. Ich kann die Ergebniselemente aus dem API-Aufruf auswählen. Dann durchlaufe ich die Elemente und möchte die ChildNodes in eine Tabelle schreiben. Wenn ich ChildNodes auswähle, indem ich Folgendes sage:

sItemId = dnItem.ChildNodes(0).innertext

Ich bekomme das richtige ItemId-Ergebnis. Aber wenn ich es versuche:

sItemId = dnItem.ChildNodes("itemId").innertext

Ich bekomme "Referenziertes Objekt hat einen Wert von 'Nichts'."

Ich habe "itemID [1]", "/ itemId [1]" und eine Vielzahl von Strings ausprobiert. Ich habe versucht, SelectSingleNode und ChildNodes.Item ("itemId") .Innertext. Der einzige, der funktioniert hat, ist der Index.

Das Problem bei der Verwendung des Index besteht darin, dass manchmal untergeordnete Elemente in den Ergebnissen weggelassen werden und der Index verworfen wird.

Weiß jemand was ich falsch mache?

Akzeptierte Antwort

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(@webHTMLeditor.TextXhtml);
HtmlNodeCollection tableRows = htmlDoc.DocumentNode.SelectNodes("//tr");
for (int i = 0; i < tableRows.Count; i++)
{
    HtmlNode tr = tableRows[i];

    HtmlNode[] td = new HtmlNode[2];
    string xpath = tr.XPath + "//td";
    HtmlNodeCollection cellRows = tr.SelectNodes(@xpath);
    //td[0] = tr.ChildNodes[1];                
    //td[1] = tr.ChildNodes[3];
    try
    {
        td[0] = cellRows[0];
        td[1] = cellRows[1];
    }
    catch (Exception)
    { }
    //etc   
}

Der Code wird verwendet, um Daten aus einer Tabelle Zeile für Zeile, Zelle für Zeile zu extrahieren. Ich habe den vorhandenen xpath benutzt und ihn nach meinen Bedürfnissen verändert. Viel Glück!



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow