【问题标题】:HtmlAgilityPack, using XPath contains method and predicatesHtmlAgilityPack,使用 XPath 包含方法和谓词
【发布时间】: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();

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

【问题讨论】:

    标签: xpath html-agility-pack contains


    【解决方案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();
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多