如何通过匹配文本选择节点

问题描述 投票:46回答:4

如果我有一堆元素,例如:

<p>A paragraph <ul><li>Item 1</li><li>Apple</li><li>Orange</li></ul></p>

Nokogiri中是否有内置方法可以让我获得包含文本“ Apple”的所有p元素? (例如,上面的示例元素将匹配)。

ruby nokogiri
4个回答
54
投票

Nokogiri现在可以使用CSS的jQuery扩展来做到这一点:

require 'nokogiri'

html = '
<html>
  <body>
    <p>foo</p>
    <p>bar</p>
  </body>
</html>
'

doc = Nokogiri::HTML(html)
doc.at('p:contains("bar")').text.strip
=> "bar"

50
投票

这里是一个可以使用的XPath:

require 'nokogiri'

doc = Nokogiri::HTML(DATA)
p doc.xpath('//li[contains(text(), "Apple")]')

__END__
<p>A paragraph <ul><li>Item 1</li><li>Apple</li><li>Orange</li></ul></p>

6
投票

尝试使用此XPath:

p = doc.xpath('//p[//*[contains(text(), "Apple")]]')

6
投票

您也可以使用Nikkou轻松完成此操作:

doc.search('p').text_includes('bar')
© www.soinside.com 2019 - 2024. All rights reserved.