Nokogiri:如何通过匹配文本来选择节点?

Zan*_*ndo 44 ruby nokogiri

如果我有一堆元素,如:

<p>A paragraph <ul><li>Item 1</li><li>Apple</li><li>Orange</li></ul></p>
Run Code Online (Sandbox Code Playgroud)

是否有一个内置的nokogiri方法可以让我所有,例如,包含文本"Apple"的p元素?(例如,上面的示例元素将匹配).

the*_*Man 52

Nokogiri可以使用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"
Run Code Online (Sandbox Code Playgroud)


小智 48

这是一个有效的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>
Run Code Online (Sandbox Code Playgroud)

希望有所帮助


Tom*_*Tom 6

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

doc.search('p').text_includes('bar')
Run Code Online (Sandbox Code Playgroud)

  • 嘿,谢谢你推荐 nikkou,我觉得这会为我节省很多时间 :) (2认同)

and*_*e-r 5

尝试使用此XPath:

p = doc.xpath('//p[//*[contains(text(), "Apple")]]')
Run Code Online (Sandbox Code Playgroud)