如何使用Nokogiri从HTML中删除不需要的标签?

sut*_*tch 2 ruby nokogiri

我需要从文档中删除所有字体标记.尝试使用以下Ruby代码执行此操作时,字体标记中的其他元素和文本将丢失.我还尝试迭代所有子元素,并在取消链接字体标记之前使其成为字体标记的兄弟元素 - 这也会导致丢失HTML.删除可包含其他元素和/或文本的标记的好方法是什么?

  doc.css('font').each do |element|
    element.unlink
  end
Run Code Online (Sandbox Code Playgroud)

更新(响应第一个解决方案):

使用node.children获取子项然后将子项移动到字体节点的父节点的问题是,没有子节点包含在字体节点中找到的文本.删除(取消链接)字体标记后,字体标记内的所有文本也会从文档中消失.

因此,我修改后的问题是:如何使用Nokogiri获取字体节点的文本以及如何移动此文本以替换字体节点位置中的字体标记.

Eri*_*rik 6

我根据你评论中的代码创建了一个更通用的解决方案:

module Filter
    def remove_tags_preserve_content!(*list)
        xpath('.//*').each do |element|
            if list.include?(element.name)
                element.children.reverse.each do |child|
                    child_clone = child.clone
                    element.add_next_sibling child_clone
                    child.unlink
                end
                element.unlink
            end
        end
    end
end

class Nokogiri::XML::Element
    include Filter
end

class Nokogiri::XML::NodeSet
    include Filter
end

# === Example ===

doc.remove_tags_preserve_content!('font')
Run Code Online (Sandbox Code Playgroud)