如何使用 Nokogiri 获取没有任何文本内容的完整 HTML

How to use Nokogiri to get the full HTML without any text content

我正在尝试使用 Nokogiri 获取完整的页面 HTML,但所有文本都被删除了。

我试过这个:

require 'nokogiri'
x = "<html>  <body>  <div class='example'><span>Hello</span></div></body></html>"
y = Nokogiri::HTML.parse(x).xpath("//*[not(text())]").each { |a| a.children.remove }
puts y.to_s

这输出:

<div class="example"></div>

我也试过 运行 它没有 children.remove 部分:

y = Nokogiri::HTML.parse(x).xpath("//*[not(text())]")
puts y.to_s

但后来我得到:

<div class="example"><span>Hello</span></div>

但我真正想要的是:

<html><body><div class='example'><span></span></div></body></html>

注意: 这是一种非常激进的方法。 <script><style><noscript> 等标签也有包含 CSS、HTML 和 JS 的子 text() 节点,您可能不想根据您的用例过滤掉。

如果您对已解析的文档进行操作而不是捕获迭代器的 return 值,您将能够删除文本节点,然后 return 文档:

require 'nokogiri'
html = "<html>  <body>  <div class='example'><span>Hello</span></div></body></html>"

# Parse HTML
doc = Nokogiri::HTML.parse(html)

puts doc.inner_html
# => "<html>  <body>  <div class=\"example\"><span>Hello</span></div>\n</body>\n</html>"

# Remove text nodes from parsed document
doc.xpath("//text()").each { |t| t.remove }

puts doc.inner_html
# => "<html><body><div class=\"example\"><span></span></div></body></html>"