L'indice HTMLAgilityPack ChildNodes funziona, il nodo denominato no

html-agility-pack selectsinglenode

Domanda

Sto analizzando una risposta API XML con HTMLAgilityPack. Sono in grado di selezionare gli elementi del risultato dalla chiamata API. Quindi faccio un giro degli oggetti e voglio scrivere i ChildNode su una tabella. Quando seleziono ChildNode dicendo qualcosa come:

sItemId = dnItem.ChildNodes(0).innertext

Ottengo il risultato giusto itemId. Ma quando provo:

sItemId = dnItem.ChildNodes(0).innertext

Ottengo "Oggetto referenziato ha un valore di 'Niente'."

Ho provato "itemID [1]", "/ itemId [1]" e una serie di stringhe. Ho provato SelectSingleNode e ChildNodes.Item ("itemId"). Innertext. L'unico che ha funzionato sta usando l'indice.

Il problema con l'utilizzo dell'indice è che a volte gli elementi figlio vengono omessi nei risultati e che rimuovono l'indice.

Qualcuno sa cosa sto sbagliando?

Risposta accettata

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   
}

Il codice viene utilizzato per estrarre i dati da una tabella, riga per riga, per cella per riga. Ho usato l'esistente xpath e l'ho modificato in base alle mie esigenze. In bocca al lupo!




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché