0

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);
        }
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 に答える