如何使用C#和html agility pack获取html文件中的表数

如何使用C#和html agility pack获取html文件中的表数,c#,html,html-parsing,html-agility-pack,C#,Html,Html Parsing,Html Agility Pack,这是一个新手问题,请提供工作代码 如何使用C#和html敏捷包计算html文件中的表 (我需要根据表的数量从html文件中的特定表中获取值。然后,我将对检索到的值执行一些数学运算。) 以下是一个示例文件,其中包含三个表,以方便您使用: <html> <head> <title>Tables</title> </head> <body> <table border="1"> <tr> <

这是一个新手问题,请提供工作代码

如何使用C#和html敏捷包计算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>

桌子
名称
电话
城市
数
斯科特
555-2345
芝加哥
42
比尔
555-1243
底特律
23
特德
555-3567
哥伦布
9

名称 年 亚伯拉罕 1865 马丁 1968 约翰 1963

动物 位置 数 老虎 丛林 8. 河马 河 4. 骆驼 沙漠 3.
如果愿意,请演示如何将结果发送到新的文本文件


谢谢

我认为这可以作为一个起点

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

我认为这可以作为一个起点

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));
}
大概是这样的:

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());
大概是这样的:

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

西蒙,我能让你的代码为我工作。由于对C#不太熟悉,我花了一点功夫,但我学到了一些东西。谢谢西蒙,我能让你的代码为我工作。由于对C#不太熟悉,我花了一点功夫,但我学到了一些东西。谢谢I4V,我无法让你的代码工作。我想了解它。我用html文件的地址替换了括号中的“html”,并运行了代码。所发生的一切只是一个黑屏快速地剥落了一次。没有别的了。我在您提供并运行的代码中的最后一个“}”之后添加了“Console.ReadLine();”。黑屏现在保持打开状态,光标在黑屏开始处闪烁。不返回任何值。我看不出“int tableCount=tables.Count();”是如何输出的,我也不确定代码的其余部分应该做什么。请澄清。
我用html文件的地址替换了括号中的“html”,并运行了代码。不,
LoadHtml
需要一个html字符串,如果您想从文件加载,您应该使用
load
I4V,我无法使您的代码正常工作。我想了解它。我用html文件的地址替换了括号中的“html”,并运行了代码。所发生的一切只是一个黑屏快速地剥落了一次。没有别的了。我在您提供并运行的代码中的最后一个“}”之后添加了“Console.ReadLine();”。黑屏现在保持打开状态,光标在黑屏开始处闪烁。不返回任何值。我看不出“int tableCount=tables.Count();”是如何输出的,我也不确定代码的其余部分应该做什么。请澄清。
我用html文件的地址替换了括号中的“html”,并运行了代码。否,
LoadHtml
需要一个html字符串,如果要从文件加载,则应使用
load