拆分大型XML为多个文件
我只是想知道我怎么可以拆分引入nokogiri拆分大型XML为多个文件
例如大XML输出,我充满了Nokogiri::XML
数据,现在我想存储在独立的文件所有这些数据,每件不大于10MB。
编辑注释:我们不想在标签的中间划分,我们希望在每个文件中复制xml标题,必须有Nokogiri的方法中的某些东西。
比方说,你有一些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
太棒了!我可以做得更简单吗?例如,nokogiri对象(站点地图)包含了大量的
如何使用这个简单的代码片段:
def split_by_size(text, size = 10 * 1024 * 1024)
text.scan /.{1, #{size}}/
end
split_by_size("12345" * 2, 3) # => ["123", "451", "234", "5"]
您可以使用此阵块为他们保存为独立的文件。
添加xml头文件好,但不适合XML,我们不希望在标签中间划分,我们要复制xml在每个文件的头文件中,必须有一些nokogiri的方法 – com
这会严重破坏XML文件。 –
这听起来像一个很好的问题,但你需要在你的要求中更加明确,最好带有样本输入和输出。如果你有' '结果应该是什么?如何为'6MB6MB6MB '?怎么样在'4MB4MB 4MB '? –
Phrogz
18MB的文字
这不是Nokogiri预计会知道该怎么做的事情; Nokogiri生成您告诉它创建的XML。作为开发人员,您应该知道您生成了多少数据,然后在生成XML之前采取措施将这些数据分解为可管理的块。无论您是使用Nokogiri创建XML还是使用适当的生成器生成YAML,JSON或电子邮件,情况都是如此。 –
一个更特别的病理情况:输出应该是什么样的“ ”等等,直到你有多个兆字节值的属性? –
Phrogz