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

时间:2009-09-24 23:28:05

标签: ruby nokogiri

如果我有很多元素,如:

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

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

4 个答案:

答案 0 :(得分:47)

这是一个有效的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>

希望有所帮助

答案 1 :(得分:45)

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"

答案 2 :(得分:6)

您也可以使用Nikkou

轻松完成此操作
doc.search('p').text_includes('bar')

答案 3 :(得分:5)

尝试使用此XPath:

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