У меня есть таблица вроде этого:
<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>
и я использую html agility pack для его анализа. Я пробовал этот код, но он не возвращает ожидаемых результатов: Вот код:
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);
}
}
Я получаю каждый столбец, потому что хотел бы обработать содержимое возвращаемого содержимого.
Что я делаю не так?
Вы можете захватить содержимое ячейки внутри вашего внешнего цикла foreach:
foreach (HtmlNode td in doc.DocumentNode.SelectNodes("//table[@id='table2']//tr//td"))
{
Response.Write(td.InnerText);
}
Также я бы рекомендовал обрезку и «деактивировать внутренний текст, чтобы убедиться, что он чист:
Response.Write(HtmlEntity.DeEntitize(td.InnerText).Trim())
В вашем источнике ячейки для [Возраст: 78] и [Возраст: 92] имеют <th>
в начале вместо <td>