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

Обновлено: 04.07.2024

Как лучше всего разбить большой документ XML на более мелкие разделы, которые все еще действительны XML? Для моих целей мне нужно разделить их примерно на трети или четверти, но для приведения примеров было бы неплохо разбить их на n компонентов.

Если у меня есть $string= 0000111111110101; Как я могу разделить его на две части, как $s1= 0000; и $s2= 11111111; $s3= 0101; а именно, я хочу Первый 4-битный, последний 4-битный и оставшиеся средние биты. Что делать, если длина трех нужных частей-это параметры, указанные пользователем? Есть ли.

Я решаю проблемы, связанные с сегментным деревом и квадратичным деревом; в то время как я заметил, что в сегментном дереве мы разделяем массив 1D на 2 (2^1) сегмента и рекурсивно делаем это до тех пор, пока не появится базовый случай. Аналогично, в четырехугольном дереве мы делим сетку 2D на 4.

Анализ документов XML с использованием DOM не масштабируется.

Этот Groovy -скрипт использует StAX (Streaming API для XML) для разделения документа XML между элементами верхнего уровня (который имеет тот же QName, что и первый дочерний элемент корневого документа). Он довольно быстр, обрабатывает произвольные большие документы и очень полезен, когда вы хотите разделить большой batch-file на более мелкие части.

Требуется Groovy на Java 6 или StAX API и реализация, такая как Woodstox в CLASSPATH

затем вы бы использовали такой код, чтобы извлечь все части:

Как только у вас есть узлы, вы можете что-то сделать с ними в своем коде или перенести весь текст узла в его собственный документ XML и действовать на нем так, как если бы он был независимым фрагментом XML (включая сохранение его обратно на диск и т. д.).

У меня есть строка, которую я хотел бы разделить на N равных частей. Например, представьте, что у меня есть строка длиной 128, и я хочу разделить ее на 4 куска длиной 32 каждый; то есть сначала 32 символа, затем вторые 32 и так далее. Как я могу это сделать?

Ищем наилучший алгоритм, чтобы взять файл, разделить его на N частей, добавить M избыточных частей и затем сохранить файл в N+M различных местах. Файлы обычно бывают большими. Например: файл размером 1 ГБ может быть разделен на (32) части по 32 МБ, вычислены (8) дополнительные части по 32 МБ, а.

Поскольку DannySmurf касается здесь, все дело в структуре документа xml.
Если у вас только два огромных тега "top level", будет чрезвычайно трудно разделить его таким образом, чтобы можно было как объединить его обратно вместе, так и прочитать его по частям как действительный xml.

Это должно дать вам n документов с правильным xml и возможность объединить их обратно вместе.
Но опять же, это зависит от файла xml.

Это скорее комментарий, чем ответ, но не будет:

Прочитать весь файл сразу? Просто подумал, что мне следует поднять этот вопрос, поскольку, судя по вопросу Томаса, он обеспокоен чтением больших файлов и хочет сломать этот процесс..

Он прочитает весь файл сразу. По моему опыту, однако, если вы просто читаете файл, делаете некоторую обработку (то есть разбиваете его), а затем продолжаете свою работу, XmlDocument пройдет через свой цикл create/read/collect так быстро, что это, скорее всего, не будет иметь значения.

Конечно, это зависит от того, что такое файл "large". Если это файл размером 30 МБ XML (который я бы счел большим для файла XML), то это, вероятно, не будет иметь никакого значения. Если это файл размером 500 МБ XML, то использование XmlDocument станет чрезвычайно проблематичным в системах без значительного количества RAM (в этом случае, однако, я бы сказал, что время ручного выбора файла с XmlReader будет более значительным препятствием).

Я сделал видео YouTube, показывающее, как разделить файлы XML с помощью foxe (бесплатный редактор XML от Firstobject), используя только небольшой объем памяти, независимо от размера входных и выходных файлов.

Использование памяти для этого решения CMarkup XML reader (pull parser) и XML writer зависит от размера вложенных документов, которые по отдельности передаются из входного файла в выходные файлы, или минимального размера блока 16 KB.

Вот пара постов в блоге, чтобы вы начали свой путь:

Не знаю, какой тип обработки вы делаете, но для очень больших XML я всегда был поклонником обработки на основе событий. Может быть, это мое прошлое Java, но мне действительно нравится SAX. Вам нужно сделать свое собственное управление состоянием, но как только вы преодолеете это, это будет очень эффективный метод анализа XML.

На этот раз я пойду с тобой, Форик. Для очень больших файлов SAX (или любой другой потоковый парсер) будет большим подспорьем в обработке. Используя DOM, вы можете собирать только узлы верхнего уровня, но вам все равно придется анализировать весь документ, чтобы сделать it. using потоковый парсер и обработка на основе событий позволяют вам "skip" узлов, которые вас не интересуют; делает обработку быстрее.

Если у вас нет полной аллергии на Perl, то XML::Twig поставляется с инструментом под названием xml_split , который может разделить документ, создав хорошо сформированный раздел XML. Вы можете разделить дерево по уровню, по размеру или по выражению XPath.

Похожие вопросы:

Как лучше всего разделить список на примерно равные части? Например, если список состоит из 7 элементов и разбить его на 2 части, то мы хотим получить 3 элемента в одной части, а в другой должно.

Я хочу разделить UITableView на три части, как iOS Music App TableView , как следующее изображение Я хочу разделить, как на изображении выше UITableView . Как я могу?

Если у меня есть $string= 0000111111110101; Как я могу разделить его на две части, как $s1= 0000; и $s2= 11111111; $s3= 0101; а именно, я хочу Первый 4-битный, последний 4-битный и оставшиеся.

Я решаю проблемы, связанные с сегментным деревом и квадратичным деревом; в то время как я заметил, что в сегментном дереве мы разделяем массив 1D на 2 (2^1) сегмента и рекурсивно делаем это до тех.

У меня есть строка, которую я хотел бы разделить на N равных частей. Например, представьте, что у меня есть строка длиной 128, и я хочу разделить ее на 4 куска длиной 32 каждый; то есть сначала 32.

Ищем наилучший алгоритм, чтобы взять файл, разделить его на N частей, добавить M избыточных частей и затем сохранить файл в N+M различных местах. Файлы обычно бывают большими. Например: файл.

Как мне split разделить строку на три части Первый 00 Второй 201 Третий (пробел) 00201 это строка, как я могу split в трех частях?

Я работаю над графическим приложением android, и в какой-то момент кода мне нужно разделить, скажем, ширину прямоугольника на 5 размеров random. У меня есть моя randomintegerfunction(int min, int.

Я разрабатываю код Arduino, который принимает на вход строку с переменным размером, и цель состоит в том, чтобы разделить строку на N частей (также N берется на вход кодом Arduino, и это.

Как лучше всего разбить большой XML-документ на более мелкие разделы, которые по-прежнему являются допустимым XML? Для моих целей мне нужно разделить их примерно на трети или четверти, но для того, чтобы предоставить примеры, было бы хорошо разделить их на n компонентов.

То вы должны использовать такой код для извлечения всех частей:

После того, как у вас есть узлы, вы можете что-то сделать с ними в своем коде, или вы можете перенести весь текст узла в его собственный XML-документ и действовать с ним, как если бы это был независимый фрагмент XML (включая его сохранение. обратно на диск и т. д.).

Анализ XML-документов с использованием DOM не масштабируется.

Этот Groovy -скрипт использует StAX (Streaming API для XML) для разделения XML-документа между верхними уровнями. элементы (которые имеют то же QName, что и первый дочерний элемент корневого документа). Это довольно быстро, обрабатывает произвольные большие документы и очень полезно, когда вы хотите разделить большой пакетный файл на более мелкие части.

Требуется Groovy на Java 6 или StAX API и такая реализация, как Woodstox в CLASSPATH

Не уверен, какой тип обработки вы выполняете, но для очень больших XML я всегда был поклонником обработки на основе событий. Может быть, это мой опыт работы с Java, но мне действительно нравится SAX. Вам нужно самостоятельно управлять состоянием, но как только вы это преодолеете, это очень эффективный метод синтаксического анализа XML.

Я собираюсь поддержать вас в этом вопросе. Для очень больших файлов SAX (или любой другой потоковый парсер) будет большим подспорьем в обработке. Используя DOM, вы можете собирать только узлы верхнего уровня, но вам все равно придется анализировать весь документ, чтобы сделать это . использование потокового парсера и обработки на основе событий позволяет вам «пропускать» узлы, которые вам не интересны; ускоряет обработку.

Если у вас нет полной аллергии на Perl, тогда XML: : Twig поставляется с инструментом под названием xml_split, который может разбивать документ, создавая правильно сформированный раздел XML. Вы можете разделить на уровне дерева, по размеру или по выражению XPath.

Я сделал видео на YouTube, показывающее как разделить файлы XML с помощью foxe (бесплатный редактор XML от Firstobject), используя только небольшой объем памяти, независимо от размера входных и выходных файлов.

Использование памяти для этого решения CMarkup XML для чтения (синтаксический анализатор) и записи XML зависит от размера вложенных документов, которые индивидуально передаются из входного файла в выходные файлы, или от минимального размера блока 16 КБ.

Как отмечает Дэнни Смурф, все дело в структуре XML-документа.
Если у вас всего два огромных тега «верхнего уровня», будет чрезвычайно сложно разделить их таким образом, чтобы можно было как объединить их вместе, так и прочитать по частям как действительный xml.

Это должно дать вам n документов с правильным xml и возможность объединить их вместе.
Но опять же, это зависит от файла xml.

Это больше комментарий, чем ответ, но не будет:

Прочитать сразу весь файл? Просто подумал, что я должен поднять этот вопрос, поскольку, судя по вопросу Томаса, он обеспокоен чтением больших файлов и хочет нарушить процесс ..

Он прочитал бы весь файл сразу. По моему опыту, однако, если вы просто читаете файл, выполняете некоторую обработку (то есть разбиваете его), а затем продолжаете свою работу, XmlDocument будет проходить цикл создания / чтения / сбора так быстро, что это, вероятно, не имеет значения.

Конечно, это зависит от того, что такое «большой» файл. Если это XML-файл размером 30 МБ (который я бы считал большим для XML-файла), это, вероятно, не будет иметь никакого значения. Если это XML-файл размером 500 МБ, использование XmlDocument станет чрезвычайно проблематичным в системах без значительного объема ОЗУ (в этом случае, однако, я бы сказал, что время ручного выбора файла с помощью XmlReader будет более значительным. препятствие).

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


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

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


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


xmllint --help | grep xpath; xslt

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


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

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


50% тегов в один файл и 50% в другой, дублируя корень. Не думаю что есть универсальный инструмент для такого. Это же как резать без рентгена.


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

Резать можно так. Инструментарий - любой редактор.


Прости, но я не понял.

Чего именно не понял?
В моём примере, xml файл собирается из 5 частей, которые я вынес в отдельные файлы в папку build. Использован был чудо редактор руки + notepad++, на разделку ушло 5 минут, на 20 частей уйдет 20 минут.
Если вам чего-то другого надо, то вопроса я тогда не понял.


Ну сам-то синтаксис понятен. Ну это мне. А кто его еще понимает?

Я вообще порезал сплитом, а потом просто добавил недостающие части в начало и в конец в каждом файле. Так что-то же минут 20 ушло. Правда не notepad++ а geany


ну чудес не бывает, как он может знать что к чему


Ну почему же. Можно же легко найти токен по которому резать. Это первый который встречается более одного раза.


это бред, а если структура не двухуровневая?

Должны все парсеры xml, апачевские точно понимают.


Ну и что? Приведи как пример как это может помешать?


если это должно быть 2 половины без намека на валидность, че б не разбить их по-байтово? структуру ты и сам можешь придумать, вот тебе намек:

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


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

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


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


xmllint --help | grep xpath; xslt

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


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

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


50% тегов в один файл и 50% в другой, дублируя корень. Не думаю что есть универсальный инструмент для такого. Это же как резать без рентгена.


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

Резать можно так. Инструментарий - любой редактор.


Прости, но я не понял.

Чего именно не понял?
В моём примере, xml файл собирается из 5 частей, которые я вынес в отдельные файлы в папку build. Использован был чудо редактор руки + notepad++, на разделку ушло 5 минут, на 20 частей уйдет 20 минут.
Если вам чего-то другого надо, то вопроса я тогда не понял.


Ну сам-то синтаксис понятен. Ну это мне. А кто его еще понимает?

Я вообще порезал сплитом, а потом просто добавил недостающие части в начало и в конец в каждом файле. Так что-то же минут 20 ушло. Правда не notepad++ а geany


ну чудес не бывает, как он может знать что к чему


Ну почему же. Можно же легко найти токен по которому резать. Это первый который встречается более одного раза.


это бред, а если структура не двухуровневая?

Должны все парсеры xml, апачевские точно понимают.


Ну и что? Приведи как пример как это может помешать?


если это должно быть 2 половины без намека на валидность, че б не разбить их по-байтово? структуру ты и сам можешь придумать, вот тебе намек:

Читайте также: