6

HtmlAgilityPack,使用 XPath 包含方法

我正在使用 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();

但它不起作用,请帮助我..

4

2 回答 2

19

也许问题只是您缺少 contains() 函数的右括号:

//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();

作为一般建议,请解释您说“它不起作用”之类的意思。我怀疑您收到可能有助于追查问题的错误消息?

于 2013-02-04T19:51:24.470 回答
1

不要为此使用 HAP,而是查看提供 jQuery 样式选择器的CsQuery 。

它看起来特别适合您正在尝试做的事情。

CsQuery 是 .NET 4 的 jQuery 端口。它实现了所有 CSS2 和 CSS3 选择器、jQuery 的所有 DOM 操作方法以及一些实用方法。大多数 jQuery 测试套件(从 1.6.2 开始)已移植到 C#。

于 2013-02-04T19:16:17.800 回答