0

假设我有以下 HTML 代码:

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

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

4

2 回答 2

2

由于这是 HTML,我会推荐 CSS 选择器:

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

#=> <h3>Foobar</h3>

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

于 2013-10-23T14:44:40.267 回答
1

您可以使用contains()XPath 函数

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

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

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

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

于 2013-10-22T20:41:23.447 回答