2017-06-27 74 views
0

我正在使用HTMLAgilityPack解析表格中的單元格。根據我的理解,這段代碼應該只輸出一次「測試」。但由於某種原因,它會輸出「測試」兩次,並且每10秒輸出兩次。HTMLAgilityPack重複輸出

圖像輸出:https://i.gyazo.com/714a880a626c262b03df2b49dcb7711a.png

我做得不對,或者這是與HTMLAgilityPack的問題嗎?我已經嘗試了多種解決方案在StackOverflow和其他教程網站上完成此操作,但我嘗試的每個解決方案都已完成此操作。我需要能夠讀取每一個單元格,這只是我測試瞭如果我可以不用重複就得到一個輸出,但我想我不能。

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 cell in cells){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將基於類:讀取HTML數據到一個強類型的對象

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

而現在的代碼:

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 
    ); 
} 

希望它有幫助。