混合模式内容 - 如何选择h1标签中的文本但不包括其子元素的文本?

3
我在打印<h1>元素中的简单文本时遇到了问题:
require 'nokogiri'

doc = Nokogiri::HTML("<h1><em>Name</em>A Johnson </h1>")
puts doc.at_xpath("//h1").content

它的输出:

NameA Johnson

我希望输出的只有A Johnson。是否可以使用XPath或CSS选择器仅选择此文本?


1
选择XPath建议的只选择文本节点是最好的。也可以使用hack:doc.at('h1').children.last.text - singpolyma
2个回答

2
如何使用XPath的text()函数?可以这样尝试(未经测试):
require 'nokogiri'

doc = Nokogiri::HTML("<h1><em>Name</em>A Johnson </h1>")
puts doc.at_xpath("//h1/text()").content

1

这些解决方案可能只能提供部分信息。请考虑:

doc = Nokogiri::HTML("<h1><em>Name</em>A <br>Johnson </h1>")
puts doc.at_xpath("//h1/text()").content

=> A

puts doc.at('h1').children.last.text

=> Johnson

我的建议是:

puts doc.search("h1/text()").text

=> A Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接