2013-02-04 128 views
4

HtmlAgilityPack,使用XPath contains方法HtmlAgilityPack,使用XPath contains方法和謂詞

我使用HtmlAgilityPack,我需要知道,如果一個類屬性包含特定單詞,現在我有這個頁面:

<div class="yom-mod yom-art-content "><div class="bd"> 
<p class="first"> .................... 
    </p> 
</div> 
</div> 

我這樣做:

HtmlDocument doc2 = ...; 
List<string> paragraphs = doc2.DocumentNode.SelectNodes("//div[@class = 'yom-mod yom-art-content ']//p").Select(paragraphNode => paragraphNode.InnerHtml).ToList(); 

但它太具體,我需要的是這樣的:

List<string> paragraphs = doc2.DocumentNode.SelectNodes("//div[contains(@class, 'yom-art-content']//p").Select(paragraphNode => paragraphNode.InnerHtml).ToList(); 

但它不工作,請幫助我..

回答

14

也許這個問題很簡單,就是你缺少右括號的包含()函數:

//div[contains(@class, 'yom-art-content']//p 
             v 
//div[contains(@class, 'yom-art-content')]//p 


List<string> paragraphs = 
     doc2.DocumentNode.SelectNodes("//div[contains(@class, 'yom-art-content')]//p") 
      .Select(paragraphNode => paragraphNode.InnerHtml).ToList(); 

作爲一般的建議,請解釋一下你的意思是,當你說這樣的話「吧沒有工作「。我懷疑你收到的錯誤信息可能有助於追蹤這個問題?

1

除了使用HAP這個的,看看CsQuery提供jQuery的風格選擇。

它看起來特別適合你想要做的事情。

CsQuery是一個jQuery端口,用於.NET 4它實現了所有CSS2 & CSS3選擇,所有的jQuery的DOM處理方法,和一些實用方法。大多數jQuery測試套件(從1.6.2開始)已經移植到C#中。