将大型XML拆分为多个文件

时间:2011-10-31 13:36:31

标签: ruby xml nokogiri

我只是想知道如何分割Nokogiri的大型XML输出

例如,我用Nokogiri::XML填充数据,现在我想将所有这些数据存储在单独的文件中,每个文件不超过10MB。

从评论中编辑:我们不想在标记的中间划分,我们想要在每个文件中复制xml标题,Nokogiri的方法中必定有一些东西。

2 个答案:

答案 0 :(得分:1)

假设你有一些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

答案 1 :(得分:0)

如何使用这个简单的片段:

def split_by_size(text, size = 10 * 1024 * 1024)
  text.scan /.{1, #{size}}/
end

split_by_size("12345" * 2, 3)  # => ["123", "451", "234", "5"]

您可以使用此数组块将它们保存到单独的文件中。