如果我有很多元素,如:
<p>A paragraph <ul><li>Item 1</li><li>Apple</li><li>Orange</li></ul></p>
是否有内置的nokogiri方法可以让我全部,例如,包含文本“Apple”的p元素? (例如,上面的示例元素将匹配)。
答案 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")]]')