2013-05-27 177 views
-5

我有一个tr的字符串(html表行)的列表,每个tr有3个td。简单Linq语句

我正在使用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 => tr.ChildNodes.Where(e => e.Name ==“td”) .Skip(1).First()。InnerText);正常工作

谢谢大家。

+5

你已经试过了什么? – Kooki

+0

请更新您的标题与您的具体问题.. http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title –

回答

2

尝试:

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

当然,这是假定会有至少2个td S IN每个tr。如果不是,那么您还必须在Skip(1).First()调用中进行空检查。

+0

谢谢。这正是我正在寻找的。有时候,我想不出像这样简单的方法。傻我。 –

+0

没问题。我鼓励你尝试使用LINQPad,以便练习和实验:http://www.linqpad.net/。另外,如果你使用这个答案,你应该接受它! –

+0

仍然2分钟去接受答案:) –

0

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

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

我会玩htmlagilitypack多一点。谢谢。 –