Как разделить xml файл на части
Перейти к содержимому

Как разделить xml файл на части

  • автор:

Разбить XML файл на несколько частей.

Есть что-то готовое для резки XML (хотя с трудом представляю как. ) на части. Мне надо распилить файл где-то на 20 частей.

Suntechnic ★★★★★
26.11.13 02:12:45 MSK

По каким критериям резать? Надо ли на выходе получать well-formed/valid XML?

Скорее всего, кури XPath и XSLT.

anonymous
( 26.11.13 02:16:44 MSK )

есть многое на свете, друг горацио, что и не снилось нашим мудрецам

chg ★★★★★
( 26.11.13 02:28:45 MSK )

xmllint —help | grep xpath; xslt

visual ★★★
( 26.11.13 02:36:13 MSK )
Последнее исправление: visual 26.11.13 02:36:24 MSK (всего исправлений: 1)

Ответ на: комментарий от anonymous 26.11.13 02:16:44 MSK

Надо ли на выходе получать well-formed/valid XML?

Да. Допустим порезать между тегами 2 уровня вложенности.

Suntechnic ★★★★★
( 26.11.13 02:50:14 MSK ) автор топика
Ответ на: комментарий от Suntechnic 26.11.13 02:50:14 MSK

Подозреваю тебе прийдется сделать это «аналитически». Используя любую библиотеку считывать, зная формат определять в место разрыва (зная формат его можно определить), например если дерево двухуровневое, можно складывать ~50% тегов в один файл и 50% в другой, дублируя корень. Не думаю что есть универсальный инструмент для такого. Это же как резать без рентгена.

trashymichael ★★★
( 26.11.13 10:07:14 MSK )
Ответ на: комментарий от trashymichael 26.11.13 10:07:14 MSK

Ну в итоге я так и сделал. Просто думал возможно есть инструмент.

Как разделить XML файл на 2 части?

Author24 — интернет-сервис помощи студентам

Здравствуйте уважаемые форумчане. Нужна помощь!
Есть XML файл размером более 200 мб. Необходимо его разделить на две части.
Кто что думает?
Помогите решить возникшую проблему, очень надо!

Структура XML файла:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 version="1.0" encoding="UTF-8"?>  date="2019-10-16 18:36"> > >BUL > >BUL > >  id="RUB" rate="1"/> > > >. > >. > >. > >. > . > > >. > >. > >. > . > > >

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как разделить txt файл на равные части?
У меня есть txt-файл:). Вот его нужно разделить на равные части. Например, ра 30 частей, чтобы во.

Как разделить текстовый файл на части, не разрывая слов
Как разделить книгу(текстовый файл 335 кб) на страници(текстовые файлы "1.txt", "2.txt", "3.txt".

Условно разделить файл на 2 части и удалить вторую часть
Написать программу, используя бестиповые файлы: Условно разделить файл на 2 части и удалить вторую.

Эксперт .NET

17690 / 12875 / 3367
Регистрация: 17.09.2011
Сообщений: 21,139

ЦитатаСообщение от Edgar4 Посмотреть сообщение

Необходимо его разделить на две части.

Что должно быть в каждой из частей?
Можете вручную разделить приведенный пример, чтобы было понятно к чему стремиться?

Регистрация: 11.11.2014
Сообщений: 256
kolorotur, вот что должно получиться в итоге:
файл 1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 version="1.0" encoding="UTF-8"?>  date="2019-10-16 18:36"> > >BUL > >BUL > >  id="RUB" rate="1"/> > > >. > >. > >. > >. > . > > >offer 1 > >offer 2 > >offer 3 > . >offer 2000 > > > >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 version="1.0" encoding="UTF-8"?>  date="2019-10-16 18:36"> > >BUL > >BUL > >  id="RUB" rate="1"/> > > >. > >. > >. > >. > . > > >offer 2001 > >offer 2002 > >offer 2003 > . >offer 4000 > > > >

Общее для каждого файла — начало и конец.
т.е.
Начало:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
 version="1.0" encoding="UTF-8"?>  date="2019-10-16 18:36"> > >BUL > >BUL > >  id="RUB" rate="1"/> > > >. > >. > >. > >. > . > >
1 2 3

Необходимо сделать выборку только по элементу
Половина элементов поместить в первый файл, а вторую во второй.

Эксперт .NET

17690 / 12875 / 3367
Регистрация: 17.09.2011
Сообщений: 21,139

Лучший ответ

Сообщение было отмечено OwenGlendower как решение

Решение

ЦитатаСообщение от Edgar4 Посмотреть сообщение

Необходимо сделать выборку только по элементу
Половина элементов поместить в первый файл, а вторую во второй.

Попробуйте как-то так:

1 2 3 4 5 6 7 8 9 10 11 12 13
var doc = XDocument.Load("BigFile.xml"); var offers = doc.XPathSelectElement("/yml_catalog/shop/offers"); var half = offers.Elements().Count() / 2; var firstHalf = offers.Elements().Take(half).ToList(); var secondHalf = offers.Elements().Skip(half).ToList(); offers.ReplaceAll(firstHalf); doc.Save("1.xml"); offers.ReplaceAll(secondHalf); doc.Save("2.xml");

Добавлено через 1 минуту
Если будет ругаться на методы, то подключите пространства:

using System.Xml.Linq; using System.Xml.XPath;

Регистрация: 11.11.2014
Сообщений: 256
kolorotur, огромное спасибо.
Все получилось.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как разделить страницу на части
Как разделить страницу на функциональные части, чтобы каждая часть загружалась отдельно, вне.

Как разделить stringstream на части?
Например у меня есть stringstream как на 55 строке только из 1000 строк(каждая строка заканчивается.

Как запрос разделить на части?
Короче столкнулся с тем что 256 таблиц запроса мне недостатачно. (Очень большой.

Разделить введеную строку на 2 части и прибавить число из второй части к переменнной
Задание: если вводится "сила 5" прибавить 5 (или другое введенное число) к переменной str и.

Или воспользуйтесь поиском по форуму:

Как разделить большой xml-файл размеров 1 гб на множество по 20 мб?

Мне дали большой xml-файл, который мне требуется импортировать на сайт, но компонент отвечающий за импорт принимает только файлы меньше 20 МБ. Можно ли с помощью алгоритма на python из одного большого xml-файла достать все данные и равномерно распределить на множество небольших по 20 и меньше мегабайт? Под «равномерно распределить» я имею ввиду что бы файл заканчивался на и в один файл не попадал и его дочерние элементы из другого файла. Каждый блок весит от силы полмегабайта-мегабайт. Пример одного блока в файле:

   path/to/img1.jpg path/to/img2.jpg path/to/img3.jpg  <item>Название</item>  Около 50-100 строк html кода  Product weight: 1.2 kg Package weight: 1.3 kg   

Отслеживать
задан 7 авг 2019 в 16:32
471 1 1 золотой знак 6 6 серебряных знаков 13 13 бронзовых знаков
У вас есть агрантия, что любой блок в этом XML не больше 20мб?
7 авг 2019 в 16:47

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

from lxml import etree data = """  path/to/img1.jpg path/to/img2.jpg path/to/img3.jpg  <item>Название</item>  Около 50-100 строк html кода  Product weight: 1.2 kg Package weight: 1.3 kg   """ data = data*3 # Для пример будет 3 одинаковых дерева class Saver: name = '/путь/к/название_файла_<>.xml' # Скобки '<>' - место для счетчика. start_id = 0 nblocks = 2 # ' # Т.к. у нас получается битый xml (множество одинаковых тегов в корне) parsed = etree.fromstring(data).findall('root') saver = Saver() for i in parsed: saver(etree.tostring(i, encoding='unicode')) del saver # Это удаляет объект saver и сохраняет последний файл. 

Не забудь убрать: data = data*3 При проблемах с кодировкой на Windows, замените ‘w’ на ‘ab’ в open и удалите encoding=’unicode’ из tostring .

Отслеживать
ответ дан 7 авг 2019 в 19:57
Anton Abrosimov Anton Abrosimov
2,233 9 9 серебряных знаков 26 26 бронзовых знаков
Комментарии не предназначены для расширенной дискуссии; разговор перемещён в чат.
7 авг 2019 в 21:44

Имя файла подкорректировал? name = ‘/tmp/блок_<>.xml’ ? Скобки <> в нем есть? Воткни print(name) после f.write(self._cur_block_str) и посмотри, куда запись идет. nblocks = 2 — количество блоков на один файл не слишком большое?

Как разделить xml-файл по тэгам с помощью PHP?

Немного предыстории: есть сайт на WordPress, на нем стоит WP All Export, который делает все заказы в один файл.
У этого плагина есть свои хуки https://www.wpallimport.com/documentation/advanced.
Необходимо разделить файл экспорта:
Orders-Export-26.xml (который можно загрузить по ссылке)

    2021-12-29 12:50:31  322 2021-12-29 12:50:31 2021-12-29 12:50:31 9001496000001  250002 
Berd Ivan Dorotheergasse 3 Habr 1010 ru
67576575@yandex.ru +74845451564
9002804000119
Berd Ivan Dorotheergasse 3 Habr 1010 ru
34987349875793845 1 100-004 1 6,00
2021-12-30 10:14:41 323 2021-12-30 10:14:41 2021-12-30 10:14:41 9001496000001 250002
Berd Ivan Dorotheergasse 3 Moscv 1010 ru
xnjnjzbotq@yandex.ru +74845451564
9002804000119
Berd Ivan Dorotheergasse 3 Moscv 1010 ru
34987349875793845 1 100-007 2 6,00 2 100-005 3 1,99

на файлы:
2021-12-29_12:50:31.xml

   2021-12-29 12:50:31  322 2021-12-29 12:50:31 2021-12-29 12:50:31 9001496000001  250002 
Berd Ivan Dorotheergasse 3 Habr 1010 ru
67576575@yandex.ru +74845451564
9002804000119
Berd Ivan Dorotheergasse 3 Habr 1010 ru
34987349875793845 1 100-004 1 6,00

2021-12-30_10:14:41.xml

   2021-12-30 10:14:41  323 2021-12-30 10:14:41 2021-12-30 10:14:41 9001496000001  250002 
Berd Ivan Dorotheergasse 3 Moscv 1010 ru
xnjnjzbotq@yandex.ru +74845451564
9002804000119
Berd Ivan Dorotheergasse 3 Moscv 1010 ru
34987349875793845 1 100-007 2 6,00 2 100-005 3 1,99

Все выходные файлы поместить в папку с названием исходного файла (в примере это Orders-Export-26)
Все заключается чтобы при каждом экспорте создавалась новая папка а в ней иметь по 1.xml на 1 заказ

  • Вопрос задан более двух лет назад
  • 146 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *