我已经挣扎了好几个小时了。
我试图断开两个对象之间的链接,这样我就可以编辑其中一个而不影响另一个,但dup
根本不起作用。
当我尝试dup
一个Nokogiri::XML::NodeSet时,它会给我一个与原始对象具有不同object_id
的对象,但当我修改副本时,会影响原始对象中的节点!Ruby中有没有办法打破这两个对象之间的联系?
def copy(collection)
body = @doc.xpath("//w:body")
children = @doc.xpath("//w:body").children
body.children.map(&:remove)
collection.each do |record|
puts "it appears child is forever affected #{children}"
clone = children.dup
clone = Nokogiri::XML::NodeSet.new(@doc, clone)
parse_nodes clone, record
body.first << clone.to_xml
end
end
您可以尝试创建自己的NodeSet
,如
dup_node_set = Nokogiri::XML::NodeSet.new(@doc, children.to_a.map(&:dup))
不确定这是否对您来说足够深入,尽管由于您的方法是递归的,我认为它应该是递归的。
这是将children
NodeSet
转换为Array
,然后在内部的每个element
上调用dup
,并将其传递给新的NodeSet
。