2013-02-04 90 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#中。