L'index HTMLAgilityPack ChildNodes fonctionne, mais pas le nœud nommé.

html-agility-pack selectsinglenode

Question

J'analyse une réponse d'API XML avec HTMLAgilityPack. Je suis en mesure de sélectionner les éléments de résultat de l'appel API. Ensuite, je passe en revue les éléments et souhaite écrire les ChildNodes dans une table. Lorsque je sélectionne ChildNodes en disant quelque chose comme:

sItemId = dnItem.ChildNodes(0).innertext

Je reçois le bon résultat itemId. Mais quand j'essaye:

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

Je reçois "L'objet référencé a la valeur 'Nothing'."

J'ai essayé "itemID [1]", "/ itemId [1]" et une série de chaînes. J'ai essayé SelectSingleNode et ChildNodes.Item ("itemId"). Innertext. Le seul qui a fonctionné utilise l'index.

Le problème avec l'utilisation de l'index est que parfois des éléments enfants sont omis dans les résultats et que cela éloigne l'index.

Quelqu'un sait ce que je fais mal?

Réponse acceptée

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   
}

Le code est utilisé pour extraire les données d'une table, ligne par ligne, par cellule et par ligne. J'ai utilisé le xpath existant et je l'ai modifié en fonction de mes besoins. Bonne chance!



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow