2013-04-26 78 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

相关问题