0

私はこのようなテーブルを持っています

<table>
  <tbody>
    <tr>
       <td>Header1</td>
       <td>Header2</td>
       <td>Header3</td>
       <td>Header4</td>
    </tr>
    <tr>
       <td>1</td>
       <td>2</td>
       <td>3</td>
       <td>4</td>
    </tr>
    <tr>
       <td>11</td>
       <td>22</td>
       <td>33</td>
       <td>44</td>
    </tr>

  </tbody>
</table>

私のコードは

var headersList = xmlDoc.XPathSelectElements("//table//tbody//tr").ToList();

しかし、headerlist はすべての td 値を提供しています :-(

今、このテーブルをループする方法を知りたいです。以下のように私の期待される結果:

最初のループの期待される結果

Header1 = 1,
Header2 = 2,
Header3 = 3,
Header4 = 4,

2 番目のループの期待される結果:

Header1 = 11
Header2 = 22
Header3 = 33
Header4 = 44

どんな助けでも本当に感謝します

4

2 に答える 2

0

HtmlAgilityPack (NuGet から入手可能) を使用して、HTML ドキュメントを解析します。テーブル データをコンソールに表示するサンプルを次に示します。

var doc = new HtmlDocument();
doc.Load(path_to_html);
var rows = 
      doc.DocumentNode.SelectNodes("//table/tbody/tr")
         .Select(tr => tr.SelectNodes("td").Select(td => td.InnerHtml).ToList())
         .ToList();

出力:

var headers = rows[0];

// skip first row which contains headers
foreach (var row in rows.Skip(1))
{
    for (int i = 0; i < row.Count; i++)
        if (headers.Count > i) // you can remove this check if data is valid
            Console.WriteLine("{0} = {1}", headers[i], row[i]);
}

結果:

Header1 = 1
Header2 = 2
Header3 = 3
Header4 = 4

Header1 = 11
Header2 = 22
Header3 = 33
Header4 = 44

列のヘッダーを定義する必要がある場合は、次のtheadタグを使用することをお勧めします:

<table>
  <thead>
    <tr>
       <td>Header1</td>
       <td>Header2</td>
       <td>Header3</td>
       <td>Header4</td>
    </tr>
  </thead>
  <tbody>
    <tr>
       <td>1</td>
       <td>2</td>
       <td>3</td>
       <td>4</td>
    </tr>
    <tr>
       <td>11</td>
       <td>22</td>
       <td>33</td>
       <td>44</td>
    </tr>
  </tbody>
</table>

この場合、解析と出力は次のようになります

var headers = doc.DocumentNode.SelectNodes("//table/thead/tr/td")
                 .Select(td => td.InnerHtml).ToList();
var rows = 
      doc.DocumentNode.SelectNodes("//table/tbody/tr")
         .Select(tr => tr.SelectNodes("td").Select(td => td.InnerHtml).ToList())
         .ToList();

foreach (var row in rows)
{
    for(int i = 0; i < row.Count; i++)
        Console.WriteLine("{0} = {1}", headers[i], row[i]);
}
于 2013-06-12T12:05:04.460 に答える