使用HtmlAgilityPack(Linq)解析html表
以下是表格结构:使用HtmlAgilityPack(Linq)解析html表,linq,html-table,html-agility-pack,Linq,Html Table,Html Agility Pack,以下是表格结构: <table class="tb-stock tb-option"> <tr> <th class="bgc2">col1</th> <th class="bgc2">col2</th> <th class="bgc2">col3</th> </tr> <tr class="alt-row"> <th class=""&g
<table class="tb-stock tb-option">
<tr>
<th class="bgc2">col1</th>
<th class="bgc2">col2</th>
<th class="bgc2">col3</th>
</tr>
<tr class="alt-row">
<th class="">2018/1/29</th>
<td class="">0.11</td>
<td class=" b-b">0.50</td>
</tr>
<tr class="alt-row">
<th class="">2018/1/30</th>
<td class="">0.22</td>
<td class=" b-b">0.55</td>
</tr>
</table>
可乐
可乐
可乐
2018/1/29
0.11
0.50
2018/1/30
0.22
0.55
我想得到“tr”下面的所有元素(包括“th”和“td”)
如何使用linq实现这一点
问题在于“.tr.Elements(“td | th”)……”
代码:
HtmlAgilityPack.HtmlDocument doc=新的HtmlAgilityPack.HtmlDocument();
文件加载(ms,编码.UTF8);
列表=
doc.DocumentNode.SelectSingleNode(//table[@class='tb-stock tb option'])
.后代(“tr”)
.Skip(1)
其中(tr=>tr.Elements(“th”).Count()>=1)
.Select(tr=>tr.Elements(“td | th”).Select(td=>td.InnerText.ToList())
.ToList();
您可以使用以下代码提取td或th元素的内部文本。我在本地对其进行了测试。输出为:
2018/1/29
0.11
0.50
2018/1/30
0.22
0.55
您可以在以下行中过滤元素:
// both td and th
.Where(node => "td|th".Contains(node.Name))
// only td
.Where(node => "td".Contains(node.Name))
工作守则是:
HtmlDocument doc = new HtmlDocument();
doc.Load("test.html", Encoding.UTF8);
List<string> table =
doc.DocumentNode.SelectSingleNode("//table[@class='tb-stock tb-option']")
.Descendants("tr")
.Skip(1)
.Where(tr => tr.Elements("th").Count() >= 1)
.SelectMany(tr => tr.ChildNodes)
.Where(node => "td|th".Contains(node.Name))
.Select(node => node.InnerText)
.ToList();
foreach (var str in table)
{
Console.WriteLine(str);
}
HtmlDocument doc=新的HtmlDocument();
doc.Load(“test.html”,Encoding.UTF8);
列表表=
doc.DocumentNode.SelectSingleNode(//table[@class='tb-stock tb option'])
.后代(“tr”)
.Skip(1)
其中(tr=>tr.Elements(“th”).Count()>=1)
.SelectMany(tr=>tr.ChildNodes)
.Where(node=>“td | th.”包含(node.Name))
.Select(node=>node.InnerText)
.ToList();
foreach(表中的var str)
{
控制台写入线(str);
}
您能试着放置或调节吗<代码>“td或th”它不工作。有没有办法将“tr”中的所有元素都放到一个列表中?谢谢Emre,这是本主题的解决方案之一!
HtmlDocument doc = new HtmlDocument();
doc.Load("test.html", Encoding.UTF8);
List<string> table =
doc.DocumentNode.SelectSingleNode("//table[@class='tb-stock tb-option']")
.Descendants("tr")
.Skip(1)
.Where(tr => tr.Elements("th").Count() >= 1)
.SelectMany(tr => tr.ChildNodes)
.Where(node => "td|th".Contains(node.Name))
.Select(node => node.InnerText)
.ToList();
foreach (var str in table)
{
Console.WriteLine(str);
}