如何使用Nokogiri获取剔除所有文本内容的完整HTML结构
正确实现方案
直接定位所有文本节点并移除即可,不会破坏原有标签结构:
require 'nokogiri' x = "<html> <body> <div class='example'><span>Hello</span></div></body></html>" doc = Nokogiri::HTML.parse(x) # 匹配所有文本节点并删除 doc.xpath("//text()").remove # 输出时使用save_with: 0可以避免Nokogiri自动添加缩进、DOCTYPE等额外内容 puts doc.to_html(save_with: 0)
运行后输出结果:
<html><body><div class="example"><span></span></div></body></html>
原有代码错误原因
- 之前使用的
//*[not(text())]XPath规则,仅匹配没有直接子文本节点的元素,示例中<span>包含Hello文本,所以不会被匹配到,无法处理该层级的文本内容 - 调用
a.children.remove会删除元素的所有子节点,除了文本节点外也会把子元素一并删除,会破坏原有的标签嵌套结构
内容的提问来源于stack exchange,提问作者jayp
相关产品推荐
相关产品推荐

