我正在尝试使用HtmlAgilityPack解析TR并使用第1,第2,第3等TD进行不同的操作。
我几乎在那里,但我的代码(下面)导致无限循环。它只是一遍又一遍地重复第一行:
foreach (HtmlNode row in htmlDoc.DocumentNode.SelectNodes("//table//tr"))
{
var node = row.SelectSingleNode("//td[1]");
if (node != null)
{
Console.WriteLine("Node: {0}", node.InnerText);
}
}
原始HTML返回正确。该表也很标准:
<table>
<tr>
<th>Header 1</hr>
<th>Header 2</hr>
<th>Header 3</hr>
<th>Header 4</hr>
<th>Header 5</hr>
</tr>
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
<td>Cell 3</td>
<td>Cell 4</td>
<td>Cell 5</td>
...
</tr>
</table>
以下代码有效但后来没有按行分组,因此操作起来要困难得多:
foreach (HtmlNode node in htmlDoc.DocumentNode.SelectNodes("//table//tr//td"))
{
Console.WriteLine("Node: {0}", node.InnerText);
}
答案 0 :(得分:1)
这适用于您的示例html
var res = doc.DocumentNode.SelectNodes("//table//tr[td]")
.Select(row => row.Descendants("td")
.Select(td => td.InnerText).ToList())
.ToList();