Html Agility Pack boucle à travers les lignes de la table et les colonnes
J'ai un tableau comme celui-ci
<table border="0" cellpadding="0" cellspacing="0" id="table2">
<tr>
<th>Name
</th>
<th>Age
</th>
</tr>
<tr>
<td>Mario
</td>
<th>Age: 78
</td>
</tr>
<tr>
<td>Jane
</td>
<td>Age: 67
</td>
</tr>
<tr>
<td>James
</td>
<th>Age: 92
</td>
</tr>
</table>
Et que vous voulez utiliser HTML Agility Pack pour l'analyser. J'ai essayé ce code mais en vain:
foreach (HtmlNode row in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr"))
{
foreach (HtmlNode col in row.SelectNodes("//td"))
{
Response.Write(col.InnerText);
}
}
Ce que je fais mal?
pouvez-vous décrire ce qui ne fonctionne pas?
J'obtiens une boucle indéterminée
Il fonctionne pour moi (enfin, pas exactement, je reçois les noms de Mario/Jane/James répéter 4 fois). Notez que//td' ne permet pas de sélectionner à partir du nœud courant uniquement (comme vous vous en doutez) mais à partir de la DocumentNode. Quelle est la version de HtmlAgilityPack utilisez-vous?
Version : v4.0.30319
Hmm qui ressemble au votre .Version NET. Avez-vous HtmlAgilityPack via NuGet?
J'obtiens une boucle indéterminée
Il fonctionne pour moi (enfin, pas exactement, je reçois les noms de Mario/Jane/James répéter 4 fois). Notez que//td' ne permet pas de sélectionner à partir du nœud courant uniquement (comme vous vous en doutez) mais à partir de la DocumentNode. Quelle est la version de HtmlAgilityPack utilisez-vous?
Version : v4.0.30319
Hmm qui ressemble au votre .Version NET. Avez-vous HtmlAgilityPack via NuGet?
OriginalL'auteur mpora | 2013-02-19
Vous devez vous connecter pour publier un commentaire.
J'ai exécuter le code et il affiche uniquement les Noms, ce qui est correct, parce que le Âges sont définies à l'aide du code HTML non valide:
<th></td>
(probablement une faute de frappe).Par ailleurs, le code peut être simplifié à une seule boucle:
Voici le code que j'ai utilisé pour le test: http://pastebin.com/euzhUAAh
OriginalL'auteur Cristian Lupascu
Pourquoi ne pas vous suffit de sélectionner l'
td
s directement?Alternativement, si vous avez vraiment besoin de la
tr
s séparément pour d'autres traitements, baisse de la//
et à faire:Bien sûr, cela ne fonctionne que si le
td
s sont les enfants directs de latr
s, mais ils devraient être, non?EDIT:
Il y a probablement plus impressionnants de façon à ce faire avec LINQ.
OriginalL'auteur agentnega
J'ai dû fournir le plein de xpath. J'ai eu la pleine xpath par l'aide de Firebug à partir d'une suggestion de @Coda (https://stackoverflow.com/a/3104048/1238850) et j'ai fini avec ce code:
Je suis sûr qu'il peut être écrit mieux que ça, mais c'est de travailler pour moi maintenant.
OriginalL'auteur mpora