无限循环解析表使用htmlagilitypack
本文关键字:htmlagilitypack 无限循环 | 更新日期: 2023-09-27 18:10:13
我试图通过使用HtmlAgilityPack解析TR,并与第一,第二,第三等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);
}
这对于您的示例html
来说很好。var res = doc.DocumentNode.SelectNodes("//table//tr[td]")
.Select(row => row.Descendants("td")
.Select(td => td.InnerText).ToList())
.ToList();