【发布时间】:2010-12-01 06:35:17
【问题描述】:
如果我有一堆元素,例如:
<p>A paragraph <ul><li>Item 1</li><li>Apple</li><li>Orange</li></ul></p>
Nokogiri 中是否有内置方法可以获取所有包含文本“Apple”的p 元素? (例如,上面的示例元素会匹配)。
【问题讨论】:
如果我有一堆元素,例如:
<p>A paragraph <ul><li>Item 1</li><li>Apple</li><li>Orange</li></ul></p>
Nokogiri 中是否有内置方法可以获取所有包含文本“Apple”的p 元素? (例如,上面的示例元素会匹配)。
【问题讨论】:
Nokogiri 可以(现在)使用 jQuery 扩展 CSS 来做到这一点:
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"
【讨论】:
&quot; 代替嵌入的引号?
doc.at(':contains("bar")')(即没有指定p 元素),那么我会得到整个文档。
doc.at(':contains("foo"):not(:has(:contains("foo")))')这里makandracards.com/makandra/…
这是一个有效的 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>
【讨论】:
尝试使用这个 XPath:
p = doc.xpath('//p[//*[contains(text(), "Apple")]]')
【讨论】:
您也可以使用Nikkou 轻松做到这一点:
doc.search('p').text_includes('bar')
【讨论】: