【问题标题】:Escaping Underscore with Xpath in Nokogiri在 Nokogiri 中使用 Xpath 转义下划线
【发布时间】:2020-05-19 23:36:18
【问题描述】:

我很困惑。鉴于此 HTML:

<div class="v-product">
    <div class="v-product__inner">
        <a href="https://www.xxxxx.com/>
    </div>
<div class="v-product__details"> Description </div>
</div>

我想使用 XPath 和 Nokogiri 获取一个节点。

我试过了

parse_page.xpath("//v-product__details") 

但由于节点为空,它不起作用。

如何在 XPath 中转义双下划线?

【问题讨论】:

    标签: ruby xpath nokogiri


    【解决方案1】:

    问题不在于下划线,而在于您的 XPath。

    //v-product__details
    

    正在寻找像&lt;v-product__details&gt; 这样的标签,而不是在其class 属性中带有v-product__details 的标签。

    我会使用 CSS 来代替:

    parse_page.css('.v-product__details')
    

    但如果你必须使用 XPath:

    parse_page.xpath('//div[contains(@class, "v-product__inner")]')
    parse_page.xpath('//*[contains(@class, "v-product__inner")]')
    parse_page.xpath('//div[@class="v-product__inner"]')
    parse_page.xpath('//*[@class="v-product__inner"]')
    ...
    

    如果 parse_page 来自 Nokogiri::HTML.fragment(...),那么您需要在 XPath 表达式中添加前导 .

    parse_page.xpath('.//div[contains(@class, "v-product__inner")]')
    ...
    

    但实际上,如果可能的话,我会使用 CSS。

    【讨论】:

    • 有道理!我会尝试并让你知道。我用过 parse_page ||= Nokogiri::HTML.parse(doc) 非常感谢
    • 即使 Nokogiri 文档也推荐 CSS 选择器优于 XPath。它们更易于阅读,并且在大多数情况下它们也能正常工作。
    猜你喜欢
    • 2013-01-27
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 2020-10-28
    • 1970-01-01
    相关资源
    最近更新 更多