无限循环解析表使用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);
        }

无限循环解析表使用htmlagilitypack

这对于您的示例html

来说很好。
var res = doc.DocumentNode.SelectNodes("//table//tr[td]")
             .Select(row => row.Descendants("td")
                                .Select(td => td.InnerText).ToList())
             .ToList();