2017-06-27 11 views
0

HTMLAgilityPackを使用してテーブルのセルを解析しています。私の理解から、このコードは "test"を一度出力するだけです。しかし何らかの理由で、「テスト」を2回、10秒ごとに2回出力します。出力のHTMLAgilityPackリピート出力

画像:https://i.gyazo.com/714a880a626c262b03df2b49dcb7711a.png

私が何か間違ったこと、またはこれはHTMLAgilityPackの問題ですかな?私はStackOverflowや他のチュートリアルのWebサイトでこれを達成するために複数のソリューションを試しましたが、私が試したすべてのソリューションがこれを行っています。私はすべてのセルを読むことができる必要があります、そして、これは、繰り返しなしで1つの出力を得ることができるかどうかテストしているだけですが、私はできないと思います。

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml("<tr><td>test</td><td>test 2</td></tr>"); 

var rows = doc.DocumentNode.SelectNodes("//tr"); 

if (rows != null && rows.Count > 0) 
{ 
     foreach (var row in rows) 
     { 
      var cells = row.SelectNodes(".//td"); 
      Console.WriteLine(cells[0].InnerText); 
      return; 
     } 
} 
+1

あなたは私たちに関連コードを提示していません。このメソッドを呼び出すのは何ですか?私たちに[mcve]を表示してください – AakashM

+0

あなたは 'SelectNodes()'を呼び出した後、**最初の**セルにアクセスしています。 **コレクション全体を反復処理する必要があります: 'var cells = row.SelectNodes(" .// td "); foreach(セル内のvarセル){Console.WriteLine(cell.InnerText); } ' – kuujinbo

答えて

0

あなたが記述しているエラーは発生していません。したがって、あなたの質問に投稿したものを呼び出すために使用しているコードに問題がなければなりません。私はその呼び出しコードが何であるかはわかりませんが、以下はテーブル内のすべてのセルを読み取るコードです。

まず、テーブル:

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(@" 
    <table> 
     <tr> 
      <td>test</td> 
      <td>test 2</td> 
     </tr> 
     <tr> 
      <td>test 3</td> 
      <td>test 4</td> 
     </tr> 
    </table> 
"); 

私はあなたの例に行を追加しました。

ここでは、ある種類の厳密に型指定されたIEnumerableに値を入れたいと仮定します。だからここのIEnumerableをベースとされる時にクラスがあります:

public class StronglyTypedRow { 
    public string columnOne {get;set;} 
    public string columnTwo {get;set;} 
} 

そして今、強く型付けされたオブジェクトにHTMLデータを読み取るコード:コンソールでそれを読むことを望む場合

var importedTable = new List<StronglyTypedRow>(); 

var rows = doc.DocumentNode.SelectNodes("//tr"); 

if (rows != null && rows.Count > 0) { 

    foreach (var row in rows) { 

     var cells = row.SelectNodes(".//td"); 

     var importedRow = 
      new StronglyTypedRow { 
       columnOne = cells[0].InnerText, 
       columnTwo = cells[1].InnerText 
      }; 

     importedTable.Add(importedRow); 

    } 
} 

for(var r = 0; r < importedTable.Count(); r++) { 
    var ir = importedTable[r]; 
    Console.WriteLine(
     "Row " + r + 
     " | Column 1 = " + ir.columnOne + 
     ", Column 2 = " + ir.columnTwo 
    ); 
} 

希望します。