无限循环使用htmlagilitypack解析表

时间:2013-04-20 17:49:58

标签: c# html html-agility-pack

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

1 个答案:

答案 0 :(得分:1)

这适用于您的示例html

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