0

我正在尝试使用 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);
        }
4

1 回答 1

2

这适用于您的示例 html

var res = doc.DocumentNode.SelectNodes("//table//tr[td]")
             .Select(row => row.Descendants("td")
                                .Select(td => td.InnerText).ToList())
             .ToList();
于 2013-04-20T19:48:43.740 回答