J'ai une table comme celle-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 j'utilise le pack d'agilité html pour l'analyser. J'ai essayé ce code mais il ne renvoie pas les résultats escomptés: Voici le code:
foreach (HtmlNode tr in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr"))
{
//looping on each row, get col1 and col2 of each row
HtmlNodeCollection tds = tr.SelectNodes("td");
for (int i = 0; i < tds.Count; i++)
{
Response.Write(tds[i].InnerText);
}
}
Je reçois chaque colonne parce que je voudrais faire un traitement sur le contenu retourné.
Qu'est-ce que je fais mal?
Vous pouvez récupérer le contenu de la cellule dans votre boucle foreach externe:
foreach (HtmlNode td in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr//td"))
{
Response.Write(td.InnerText);
}
Aussi, je vous recommande de rogner et de dé-habiliter le texte intérieur pour s'assurer qu'il est propre:
Response.Write(HtmlEntity.DeEntitize(td.InnerText).Trim())
Dans votre source, les cellules de [Age: 78] et [Age: 92] ont une <th>
au début au lieu de <td>