我已经挣扎了几个小时。
我试图打破两个对象之间的链接,这样我就可以编辑一个而不影响另一个,但是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
答案 0 :(得分:0)
你可以尝试像这样创建自己的NodeSet
dup_node_set = Nokogiri::XML::NodeSet.new(@doc, children.to_a.map(&:dup))
不确定这对你来说是否足够深,尽管你的方法是递归的,我认为应该这样。
这样做是将children
NodeSet
转换为Array
,然后在内部的每个dup
上调用element
并将其传递给新{ {1}}。