Разделить большой XML на несколько файлов - PullRequest
1 голос
/ 31 октября 2011

Мне просто интересно, как я могу разделить большой вывод XML Nokogiri

Например, я заполнил Nokogiri::XML данными и теперь хочу сохранить все эти данные в отдельных файлах, каждый размером не более 10 МБ.

Редактировать из комментария : Мы не хотим делить посередине тега, мы хотим повторить заголовок xml в каждом файле, в методах Нокогири должно быть что-то.

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

Допустим, у вас есть 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
0 голосов
/ 31 октября 2011

Как насчет использования этого простого фрагмента:

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

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

Вы можете использовать этот массив кусков для сохранения их в отдельных файлах.

...