使用HTML敏捷包和Linq解析内容

问题描述:

我试图在html中获取搜索关键字的重要内容。使用HTML敏捷包和Linq解析内容

使用下面的代码生成HtmlNodeCollection

var findclasses = doc.DocumentNode.SelectNodes("//body//*[not(self::script)]").Where(x => x.InnerHtml.Contains("SearchedKeywordText") && x.InnerHtml.Contains("SearchedKeyword1Text")).OrderBy(x => x.Name); 
       string FirstContent = findclasses.First().InnerText; 

,我得到这个结果

  • 结果查看扩大结果视图将枚举了IEnumerable
  • [0]名称行: “div”} HtmlAgilityPack.HtmlNode
  • [1]名称: “DIV”} HtmlAgilityPack.HtmlNode
  • [2]名称: “DIV”} HtmlAgilityPack.HtmlNode
  • [3]名称: “UL”} HtmlAgilityPack.HtmlNode
  • [4]名称: “里”} HtmlAgilityPack.HtmlNode
  • [5 ]名称: “跨度”} HtmlAgilityPack.HtmlNode
  • [6]名称: “跨度”} HtmlAgilityPack.HtmlNode
  • [7]名称: “DIV”} HtmlAgilityPack.HtmlNode
  • [8]名称:“跨度“} HtmlAgilityPack.HtmlNode
  • [9]名称: “跨度”} HtmlAgilityPack.HtmlN颂
  • [10]产品名称: “UL”} HtmlAgilityPack.HtmlNode
  • [11]产品名称: “李”} HtmlAgilityPack.HtmlNode

但是,当我想简单的修改代码来获得字符串从外面:

string search1 = "SearchedKeywordText"; 
string search2 = "SearchedKeyword1Text"; 
.. 
.. 
var findclasses = doc.DocumentNode.SelectNodes("//body//*[not(self::script)]").Where(x => x.InnerHtml.Contains(search1) && x.InnerHtml.Contains(search2)).OrderBy(x => x.Name); 
        string FirstContent = findclasses.First().InnerText; 

结果:

  • 个结果查看扩大结果视图将枚举了IEnumerable
    空“枚举没有结果”

枚举在第一方块是工作为我好,但改变后,这是行不通的。这个简单的问题有什么想法吗?

你是在叫.First()IEnumerable

你可以使用.Any()检查findclasses不为空

if (findclasses.Any()) 
{ 
    string firstContent = findclasses.First().InnerText; 
} 
  • 为什么是空的?

也许有结果,但有一种情况mistmatch,你需要让你的搜索不区分大小写,对于不是

x.InnerHtml.Contains(search1) 

,你可以这样做:

x.InnerHtml.IndexOf(search1,StringComparison.InvariantCultureIgnoreCase)>=0 

如果找到搜索关键字,则返回true,而不考虑字母大小写。

+0

是的,多数民众赞成我需要感谢你! – 2015-03-13 16:52:03