2010-03-11 15 views
0

Je suis en train d'analyser une réponse API XML avec HTMLAgilityPack. Je suis en mesure de sélectionner les éléments de résultat de l'appel API. Ensuite, je boucle les éléments et je veux écrire les ChildNodes à une table. Lorsque je sélectionne ChildNodes en disant quelque chose comme:L'index HTMLAgilityPack ChildNodes fonctionne, le noeud nommé ne fonctionne pas

sItemId = dnItem.ChildNodes(0).innertext 

Je reçois le résultat itemId approprié. Mais quand j'essaie:

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

Je reçois "objet référencé a une valeur de 'Nothing'."

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

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

Quelqu'un sait-il ce que je fais mal?

Répondre

1
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 des données d'une table, rangée par rangée, par cellule par ligne. J'ai utilisé le xpath existant et je l'ai modifié en fonction de mes besoins. Bonne chance!

+0

Utilisez-vous le chemin xpath complet dans les SelectNodes du tr? J'essaie cela et ça ne marche pas. Je pensais que les méthodes ChildNodes ou SelectNodes utiliseraient le XPath relatif mais je peux faire n'importe lequel. Mais ça ne marche pas ici. –

+0

Oui, j'utilise le chemin Xpath complet. C'est le Xpath fourni par le . Il ressemble un peu à "// table [1] // tbody [1] // tr [1]" auquel j'ajoute le "// td" pour obtenir tous les TableData de cette ligne de table spécifique. J'ai préféré cette approche à l'approche que j'ai commentée car je pouvais garantir que tous les auraient la même structure enfantine. –

+0

En outre, si vous essayez d'utiliser le HAP Explorer http://htmlagilitypack.codeplex.com/releases/view/33903#DownloadId=86142 De cette façon, vous pouvez voir comment le xpath est construit. Bonne chance! –