我正在尝试为html中的搜索关键字获取重要内容。
使用以下代码生成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]姓名:" li"} HtmlAgilityPack.HtmlNode
- [5]姓名:" span"} HtmlAgilityPack.HtmlNode
- [6]姓名:" span"} HtmlAgilityPack.HtmlNode
- [7]姓名:" div"} HtmlAgilityPack.HtmlNode
- [8]姓名:" span"} HtmlAgilityPack.HtmlNode
- [9]姓名:" span"} HtmlAgilityPack.HtmlNode
- [10]姓名:" ul"} HtmlAgilityPack.HtmlNode
- [11]姓名:" li"} 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
空"枚举没有产生结果"
第一个块中的枚举对我有用,但在此之后更改它不起作用。这个简单的问题有什么想法吗?
答案 0 :(得分:1)
您在空.First()
IEnumerable
您可以使用.Any()
检查findclasses是否为空
if (findclasses.Any())
{
string firstContent = findclasses.First().InnerText;
}
也许有结果,但有一个案例错配,你需要让你的搜索案例不敏感,为此而不是
x.InnerHtml.Contains(search1)
你可以这样做:
x.InnerHtml.IndexOf(search1,StringComparison.InvariantCultureIgnoreCase)>=0
如果找到搜索关键字,无论字母大小写如何,将返回true。