El índice HTMLAgilityPack ChildNodes funciona, el nodo nombrado no lo hace

html-agility-pack selectsinglenode

Pregunta

Estoy analizando una respuesta API XML con HTMLAgilityPack. Puedo seleccionar los elementos de resultado de la llamada a la API. Luego recorro los elementos y quiero escribir los ChildNodes en una tabla. Cuando selecciono ChildNodes diciendo algo como:

sItemId = dnItem.ChildNodes(0).innertext

Obtengo el resultado itemId apropiado. Pero cuando lo intento:

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

Obtengo "El objeto referenciado tiene un valor de 'Nada'".

He intentado "itemID [1]", "/ itemId [1]" y una variedad de cadenas. He intentado SelectSingleNode y ChildNodes.Item ("itemId"). Innertext. El único que ha funcionado es usar el índice.

El problema con el uso del índice es que a veces se omiten elementos secundarios en los resultados y eso elimina el índice.

¿Alguien sabe lo que estoy haciendo mal?

Respuesta aceptada

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   
}

El código se utiliza para extraer datos de una tabla, fila por fila, por celda por fila. Utilicé el xpath existente y lo modifiqué según mis necesidades. ¡Buena suerte!




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué