Ich habe einen Tisch wie folgt:
<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>
und ich verwende html agility pack um es zu parsen. Ich habe diesen Code ausprobiert, aber er liefert keine erwarteten Ergebnisse: Hier ist der 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);
}
}
Ich erhalte jede Spalte, weil ich gerne etwas an den zurückgegebenen Inhalten verarbeiten würde.
Was mache ich falsch?
Sie können den Zelleninhalt aus Ihrer äußeren foreach-Schleife herausholen:
foreach (HtmlNode td in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr//td"))
{
Response.Write(td.InnerText);
}
Außerdem würde ich empfehlen, den inneren Text zu entziffern und zu de-qualifizieren, um sicherzustellen, dass er sauber ist:
Response.Write(HtmlEntity.DeEntitize(td.InnerText).Trim())
In deiner Quelle haben die Zellen für [Alter: 78] und [Alter: 92] am Anfang ein <th>
-Tag anstelle von <td>