2013-04-26 69 views
0

這是一個新手問題,所以請提供工作代碼。如何使用C#和html-agility-pack獲取html文件中的表的數量

如何使用C#和html-agility-pack來計算html文件中的表格?

(我需要基於表的計數來獲得在HTML文件從特定的表值。然後,我將在檢索到的值執行了一些算術)

下面是三個表的樣本文件您的便利:

<html> 
<head> 
<title>Tables</title> 
</head> 
<body> 
<table border="1"> 
    <tr> 
    <th>Name</th> 
    <th>Phone</th> 
    <th>City</th> 
    <th>Number</th> 
    </tr> 
    <tr> 
    <td>Scott</td> 
    <td>555-2345</td> 
    <td>Chicago</td> 
    <td>42</td> 
    </tr> 
    <tr> 
    <td>Bill</td> 
    <td>555-1243</td> 
    <td>Detroit</td> 
    <td>23</td> 
    </tr> 
    <tr> 
    <td>Ted</td> 
    <td>555-3567</td> 
    <td>Columbus</td> 
    <td>9</td> 
    </tr> 
</table> 
<p></p> 
<table border="1"> 
    <tr> 
    <th>Name</th> 
    <th>Year</th> 
    </tr> 
    <tr> 
    <td>Abraham</td> 
    <td>1865</td> 
    </tr> 
    <tr> 
    <td>Martin</td> 
    <td>1968</td> 
    </tr> 
    <tr> 
    <td>John</td> 
    <td>1963</td> 
    </tr> 
</table> 
<p></p> 
<table border="1"> 
    <tr> 
    <th>Animal</th> 
    <th>Location</th> 
    <th>Number</th> 
    </tr> 
    <tr> 
    <td>Tiger</td> 
    <td>Jungle</td> 
    <td>8</td> 
    </tr> 
    <tr> 
    <td>Hippo</td> 
    <td>River</td> 
    <td>4</td> 
    </tr> 
    <tr> 
    <td>Camel</td> 
    <td>Desert</td> 
    <td>3</td> 
    </tr> 
</table> 
</body> 
</html> 

如果您願意,請顯示如何將結果發送到新的文本文件。

謝謝!

回答

1

事情是這樣的:

HtmlDocument doc = new HtmlDocument(); 
doc.Load(myTestFile); 

// get all TABLE elements recursively 
int count = doc.DocumentNode.SelectNodes("//table").Count; 

// output to a text file 
File.WriteAllText("output.txt", count.ToString()); 
+0

Simon, 我能夠讓你的代碼爲我工作。由於不熟悉C#,它花了一些工作,但我學到了一些東西。謝謝! – user1944272 2013-04-28 19:17:09

2

我覺得這可能是一個起點

var doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(html); 

var tables = doc.DocumentNode.Descendants("table"); 
int tablesCount = tables.Count(); 

foreach (var table in tables) 
{ 
    var rows = table.Descendants("tr") 
        .Select(tr => tr.Descendants("td").Select(td => td.InnerText).ToList()) 
        .ToList(); 

    foreach(var row in rows) 
     Console.WriteLine(String.Join(",", row)); 
} 
+0

I4V, 我是不是能夠得到您的代碼工作。我想了解它。 我用括號中的「html」替換爲我的html文件的地址並運行代碼。所發生的只是一個黑屏快速閃爍一次。沒有其他的。 我添加了「Console.ReadLine();」在你提供的代碼中的最後一個「}」後面運行。黑屏現在保持打開狀態並且光標在其開始處閃爍。沒有值被返回。 我不明白「int tablesCount = tables.Count();」可能會被輸出,我不確定剩下的代碼應該做什麼。請澄清。 – user1944272 2013-04-28 19:38:26

+0

'我用括號中的「html」替換了我的html文件的地址並運行了代碼'。不,'LoadHtml'需要一個html **字符串**,如果你想從**文件加載**,你應該使用'Load' – I4V 2013-04-28 19:54:55

相關問題