我有一些看起来像这样的HTML:
<dt>
<a href="#">Hello</a>
(2009)
</dt>
我已将所有HTML加载到名为record
的变量中。我需要解析一年,即2009年是否存在。
如何获取dt
标记内的文字,而不是a
标记内的文字?我使用了record.search("dt").inner_text
,这给了我一切。
这是一个微不足道的问题,但我还没有想到这一点。
答案 0 :(得分:17)
为了让所有带有文本的直接孩子,而不是任何进一步的子孩子,你可以像这样使用XPath:
doc.xpath('//dt/text()')
或者如果您想使用搜索:
doc.search('dt').xpath('text()')
答案 1 :(得分:10)
使用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
答案 2 :(得分:5)
dt
元素有两个子元素,因此您可以通过以下方式访问它:
doc.search("dt").children.last.text