假设我有以下HTML代码:
...
<p>bla bla</p>
<h3>Foobar</h3>
<p>bla bla</p>
<p>bla bla</p>
<h3>Example</h3>
...
有没有办法获取包含文字h3
的第一个Foobar
元素?
答案 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')]")