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