html agility pack parse table

c# html-agility-pack

Question

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?

Réponse populaire

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>



Related

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