直接在 Nokogiri 中的标签内获取文本



我有一些看起来像这样的 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

相关内容

  • 没有找到相关文章

最新更新