我有一些看起来像这样的 HTML:
<dt>
<a href="#">Hello</a>
(2009)
</dt>
我已经将所有 HTML 加载到一个名为record
. 如果存在,我需要解析出年份,即 2009 年。
如何获取标签内的dt
文本而不是标签内的文本a
?我用过record.search("dt").inner_text
,这给了我一切。
这是一个微不足道的问题,但我还没有设法弄清楚。
要获取所有带有文本的直接子级,但不获取任何其他子级,您可以使用 XPath,如下所示:
doc.xpath('//dt/text()')
或者,如果您想使用搜索:
doc.search('dt').xpath('text()')
使用 XPath 准确选择您想要的内容(如 @Casper 所建议的那样)是正确的答案。
def own_text(node)
# Find the content of all child text nodes and join them together
node.xpath('text()').text
end
这是另一个有趣的答案:)
def own_text(node)
node.clone(1).tap{ |copy| copy.element_children.remove }.text
end
在行动中看到:
require 'nokogiri'
root = Nokogiri.XML('<r>hi <a>BOO</a> there</r>').root
puts root.text #=> hi BOO there
puts own_text(root) #=> hi there
该dt
元素有两个子元素,因此您可以通过以下方式访问它:
doc.search("dt").children.last.text