简单的Linq声明

时间:2013-05-27 14:47:36

标签: c# linq html-agility-pack

我有一个包含tr(html表格行)字符串的列表,每个tr都有3个td。

我正在使用HtmlAgilityPack过滤掉网页中的数据。

var data= from tr in content.ChildNodes.Where(c =>c.Name.Equals("tr"))                    
         select tr;

<tr><td></td><td>aaa</td><td></td></tr>
<tr><td></td><td>bbb</td><td></td></tr>
<tr><td></td><td>aaa</td><td></td></tr>
<tr><td></td><td>aaa</td><td></td></tr>

...

我希望得到所有按td [2]分组的值,即:aaa,bbb

感谢。

更新:data.GroupBy(tr =&gt; tr.ChildNodes.Where(e =&gt; e.Name ==&#34; td&#34;)                      .Skip(1)。首先()的innerText)。工作正常

谢谢大家。

2 个答案:

答案 0 :(得分:2)

尝试:

data.GroupBy(tr => tr.ChildNodes
                     .Where(e => e.Name == "td")
                     .Skip(1).First().Value));

当然,这假设每个td中至少有2 tr秒。如果没有,那么您还必须在Skip(1).First()调用中进行一些空检查。

答案 1 :(得分:0)

这应该将TD值保存到集合中。

var entries = from td in data.DocumentNode.SelectNodes("//td").Where(node => node.InnerHtml != string.Empty) select td.InnerHtml;