HtmlAgilityPack,使用XPath包含方法和谓词

contains html-agility-pack xpath

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

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

一般承认的答案

也许问题只是你缺少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();

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


热门答案

而不是使用HAP,请查看提供jQuery样式选择器的CsQuery

它看起来特别适合你想要做的事情。

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




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因