首页 > 解决方案 > 在 Nokogiri 中使用 Xpath 转义下划线

问题描述

我很困惑。鉴于此 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 中转义双下划线?

标签: rubyxpathnokogiri

解决方案


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

//v-product__details

正在寻找一个类似的标签<v-product__details>,而不是v-product__details它的class属性中的东西。

我会为此使用 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。


推荐阅读