我有一个准备好的Nokogiri页面,其中删除了垃圾......但文本部分仍然存储在不同的节点中......
我想要做的是将所有直接邻居文本节点连接到一个单个文本节点......
我想出了什么:#merge neighbour text nodes -> connect content
def merge_text_nodes(node)
previoustext = false
node.children.each_with_index do |item,i|
if item.name != 'text()'
merge_text_nodes(item)
previoustext = false
else
if previoustext
node.children[i-1].inner_html += item.inner_html
item.remove
end
previoustext = true
end
end
end
但它似乎没有按预期工作 - 它似乎什么都不做......有人可以告诉我如何正确地做/向我显示错误/正确的方法吗?
答案 0 :(得分:2)
好的,最后我自己做对了:
def merge_text_nodes(node)
prev_is_text = false
newnodes = []
node.children.each do |element|
if element.text?
if prev_is_text
newnodes[-1].content += element.text
else
newnodes << element
end
element.remove
prev_is_text = true
else
newnodes << merge_text_nodes(element)
element.remove
prev_is_text = false
end
end
node.children.remove
newnodes.each do |item|
node.add_child(item)
end
return node
end
答案 1 :(得分:0)
这个问题的一个有趣的解决方案可能如下:
xml # your Nokogiri XML object, with unmerged text nodes
xml = Nokogiri::XML(xml.to_xml)
从字符串重新解析XML会导致相邻的文本节点合并为副作用。