Я бы начал с метода, подобного этому (не стесняйтесь monkeypatch Nokogiri::XML::Node
, если хотите)
def is_blank?(node)
(node.text? && node.content.strip == '') || (node.element? && node.name == 'br')
end
Затем перейдите к другому методу, который проверяет, что все дочерние элементы не заполнены:
def all_children_are_blank?(node)
node.children.all?{|child| is_blank?(child) }
# Here you see the convenience of monkeypatching... sometimes.
end
И, наконец, получите document
и
document.css('p').find_all{|p| all_children_are_blank?(p) }.each do |p|
p.remove
end