HtmlAgilityPack,使用 XPath 包含方法和谓词
Posted
技术标签:
【中文标题】HtmlAgilityPack,使用 XPath 包含方法和谓词【英文标题】:HtmlAgilityPack, using XPath contains method and predicates 【发布时间】:2013-01-19 13:37:30 【问题描述】: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();
但它不起作用,请帮助我..
【问题讨论】:
【参考方案1】:不要为此使用 HAP,而是查看提供 jQuery 样式选择器的 CsQuery。
它看起来特别适合你想要做的事情。
CsQuery 是 .NET 4 的 jQuery 端口。它实现了所有 CSS2 和 CSS3 选择器、jQuery 的所有 DOM 操作方法以及一些实用方法。大部分 jQuery 测试套件(从 1.6.2 开始)已移植到 C#。
【讨论】:
【参考方案2】:也许问题只是你缺少 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();
作为一般建议,请解释您说“它不起作用”之类的意思。我怀疑您收到了可能有助于追查问题的错误消息?
【讨论】:
以上是关于HtmlAgilityPack,使用 XPath 包含方法和谓词的主要内容,如果未能解决你的问题,请参考以下文章
C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)