使用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,而不考虑字母大小写。
是的,多数民众赞成我需要感谢你! – 2015-03-13 16:52:03