假设我有以下 HTML 代码:
...
<p>bla bla</p>
<h3>Foobar</h3>
<p>bla bla</p>
<p>bla bla</p>
<h3>Example</h3>
...
有没有办法获取h3
包含文本的第一个元素Foobar
?
由于这是 HTML,我会推荐 CSS 选择器:
puts doc.at_css('h3:contains("Foobar")')
#=> <h3>Foobar</h3>
在解析 HTML 时,CSS 选择器倾向于使表达式更具可读性。我倾向于仅将 XPath 用于 XML 或当我需要 XPath 表达式的全部功能时。
您可以使用contains()
XPath 函数:
doc.xpath("//h3[contains(text(), 'Foobar')]")
或者,如果目标文本可能位于 的后代文本节点中h3
,请使用:
doc.xpath("//h3[contains(.//text(), 'Foobar')]")