Допустим, у вас есть xml:
xml = '<foo><child num="1"/><child num="2"/><child num="3"/></foo>'
doc = Nokogiri::XML(xml)
И вы хотите разбить диапазоны дочерних узлов и сохранить их отдельно, не теряя иерархию.Вы можете сделать что-то вроде:
[0..0, 1..1, 2..2].each do |range|
c = doc.clone
(c.xpath('/foo/child') - c.xpath('/foo/child')[range]).remove #remove nodes not in range
File.open("#{range.first}.xml", 'w') {|f| f.write(c.to_s) }
end