2015-03-13 72 views
1

我試圖在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
    空「枚舉沒有結果」

枚舉在第一方塊是工作爲我好,但改變後,這是行不通的。這個簡單的問題有什麼想法嗎?

回答

1

你是在叫.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