搜索具有特定内容的元素?

时间:2013-10-22 20:25:17

标签: ruby nokogiri

假设我有以下HTML代码:

...
<p>bla bla</p>
<h3>Foobar</h3>
<p>bla bla</p>
<p>bla bla</p>
<h3>Example</h3>
...

有没有办法获取包含文字h3的第一个Foobar元素?

2 个答案:

答案 0 :(得分:2)

由于这是HTML,我建议使用CSS选择器:

puts doc.at_css('h3:contains("Foobar")')

#=> <h3>Foobar</h3>

CSS解析器在解析HTML时倾向于使表达式更具可读性。我倾向于仅将XPath用于XML,或者当我需要XPath表达式的全部功能时。

答案 1 :(得分:1)

您可以使用contains() XPath function

doc.xpath("//h3[contains(text(), 'Foobar')]")

或者,如果目标文本可能位于h3的后代文本节点中,请使用:

doc.xpath("//h3[contains(.//text(), 'Foobar')]")

要直接获取第一个匹配元素而不是数组,请使用at_xpath而不是xpath