Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

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


Разделяй и властвуй в больших XML-документах



Уровень сложности: простой

Benoit Marchal, Консультант, Pineapplesoft

05.06.2003

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

В предыдущем совете (См. Ссылки по теме) объяснялось, как совместить два различных XML-документа в таблице стилей. Для иллюстрации примера использовалась фотогалерея, собранная из четырех отдельных XML-документов, которые в конечном итоге были собраны в одну Web-страницу. Эта методика также подходит для совмещения log-файлов (сбора суточных отчетов в месячный) и оглавлений (сбора нескольких глав в одно оглавление).

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

Фотогалерея

Документ из Листинга 1 представляет собой небольшую фотогалерею, состоящую из четырех фото с описаниями. Нашей задачей будет создать из документа небольшой Web-сайт. Для ускорения загрузки каждая фотография должна размещаться на собственной странице. Сложностью здесь является разбиение оригинального документа на количество страниц, соответствующее количеству фотографий.


Листинг 1. gallery.xml – фотогалерея в одном XML-документе
 <?xml version="1.0"?> <gl:gallery xmlns:gl="http://ananas.org/2003/tips/gallery"> <gl:title>Flowers and plants</gl:title> <gl:photo> <gl:title>Rose</gl:title> <gl:date>September 2002</gl:date> <gl:image>rose.jpg</gl:image> <gl:description> This photo was taken early in the morning in a very soft light. This rose flower was shot at a gas station on the highway! </gl:description> </gl:photo> <gl:photo> <gl:title>Orchid</gl:title> <gl:date>May 2003</gl:date> <gl:image>orchid.jpg</gl:image> <gl:description> This is a lady slipper (paphiopedilum liemianum) orchid. In this shot, the flower is window-lit. </gl:description> </gl:photo> <gl:photo> <gl:title>Lily-of-the-valley</gl:title> <gl:date>May 2003</gl:date> <gl:image>lily.jpg</gl:image> <gl:description> The lily-of-the-valley is popular for its sweet perfume and is typically associated with May 1st. This was done under artificial lights. </gl:description> </gl:photo> <gl:photo> <gl:title>Cardoon</gl:title> <gl:date>September 2002</gl:date> <gl:image>cardoon.jpg</gl:image> <gl:description> Also known as artichoke thistle, the cardoon is grown for its gentle laxative properties. This specimen is dried and the colors have been digitally altered to create a more graphic image. </gl:description> </gl:photo> </gl:gallery> 

В разбиении страниц есть как положительные, так и отрицательные моменты. Хорошим является то, что можно разбить документ на любое количество страниц при помощи обычного обработчика XSLT. Плохо то, что это, пока, не является стандартной функцией, так как XSLT-обработчики имеют различные реализации. К счастью, эти различия лишь "косметические".


Мгновенная публикация

Листинг 2 представляет собой таблицу стилей для публикации фотогалереи. Обратите особое внимание на шаблон для тега gl:photo. Этот шаблон создает отдельную HTML-страницу, сохраняющуюся как самостоятельный файл при помощи тега xalan:redirect. Таблица стилей была проверена на JDK 1.4.1 и работает только с XSL-обработчиками JDK или Xalan (Apache Xalan является основной реализацией для JAXP).


Листинг 2. jdk.xsl – таблица стилей для JDK 1.4 (и Xalan)
 <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gl="http://ananas.org/2003/tips/gallery" xmlns:xalan="org.apache.xalan.xslt.extensions.Redirect" extension-element-prefixes="xalan"> <xsl:output method="html"/> <xsl:template match="gl:gallery"> <html> <head><title><xsl:value-of select="gl:title"/></title></head> <body> <h2><xsl:value-of select="gl:title"/></h2> <p>The photos are <a href="photo-0.html">here</a>.</p> </body> </html> <xsl:apply-templates select="gl:photo"/> </xsl:template> <xsl:template match="gl:photo"> <xalan:write select="concat('photo-',position(),'.html')"> <html> <head><title><xsl:value-of select="gl:title"/></title></head> <body> <img src="{gl:image}" align="left"/> <h2><xsl:value-of select="gl:title"/></h2> <p><xsl:value-of select="gl:date"/></p> <p><xsl:value-of select="gl:description"/></p> <p> <xsl:if test="preceding-sibling::gl:photo"> <a href="photo-{position() - 1}.html">Previous</a> <xsl:text> </xsl:text> </xsl:if> <xsl:if test="following-sibling::gl:photo"> <a href="photo-{position() + 1}.html">Next</a> </xsl:if> </p> </body> </html> </xalan:write> </xsl:template> </xsl:stylesheet> 


Исходный код (См. Ссылки по теме) включает в себя документ, таблицу стилей и небольшое Java-приложение для тестирования кода. Для запуска этого примера вам понадобится JDK 1.4.

Тег xalan:redirect указывает обработчику сохранить содержимое элемента в отдельном файле. Имя файла задается атрибутом select. В нашем примере таблица стилей создает имена файлов путем добавления номера фотографии (или, точнее, ее позиции) к строке photo-. Файлы называются, соответственно, photo-1.html, photo-2.html, photo-3.html и photo-4.html.

К несчастью тег xalan:redirect не является частью стандарта, так что другие обработчики не смогут его распознать. Тег xalan:redirect реализован как расширение. Для его объявления необходимо объявить пространство имен для URI-адреса org.apache.xalan.xslt.extensions.Redirect. Надо отметить, что этот адрес не является правильным URI, однако Xalan его все равно распознает. После этого необходимо объявить пространство имен как расширение с помощью атрибута extension-element-prefixes. Объявление пространства имен и атрибут extension-element-prefixes должны располагаться в элементе xsl:stylesheet.


Как обстоят дела с другими обработчиками

Xalan является хорошим обработчиком, однако существуют и другие. Вам необходимо изучить документацию вашего любимого XSLT-обработчика и найти эквивалентное расширение. На сколько мне известно, каждый XSLT-обработчик предлагает хотя бы одно расширение, позволяющее осуществлять вывод множества документов.

К примеру, если вы захотите воспользоваться обработчиком Saxon, автором которого является Michael Kay, вместо xalan:redirect. в шаблоне gl:photo вам необходимо будет использовать тег saxon:output. Изменения здесь минимальны, так как синтаксис тега saxon:output очень похож на xalan:redirect. В листинге 3 показана версия Листинга 2 для Saxon. Обратите внимание на использование пространства имен для расширения, определенного в Saxon.


Листинг 3. saxon.xsl – таблица стилей для Saxon
 <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gl="http://ananas.org/2003/tips/gallery" xmlns:saxon="http://icl.com/saxon" extension-element-prefixes="saxon"> <xsl:output method="html"/> <xsl:template match="gl:gallery"> <html> <head><title><xsl:value-of select="gl:title"/></title></head> <body> <h2><xsl:value-of select="gl:title"/></h2> <p>The photos are <a href="photo-1.html">here</a>.</p> </body> </html> <xsl:apply-templates select="gl:photo"/> </xsl:template> <xsl:template match="gl:photo"> <saxon:output href="photo-{position()}.html"> <html> <head><title><xsl:value-of select="gl:title"/></title></head> <body> <img src="{gl:image}" align="left"/> <h2><xsl:value-of select="gl:title"/></h2> <p><xsl:value-of select="gl:date"/></p> <p><xsl:value-of select="gl:description"/></p> <p> <xsl:if test="preceding-sibling::gl:photo"> <a href="photo-{position() - 1}.html">Previous</a> <xsl:text> </xsl:text> </xsl:if> <xsl:if test="following-sibling::gl:photo"> <a href="photo-{position() + 1}.html">Next</a> </xsl:if> </p> </body> </html> </saxon:output> </xsl:template> </xsl:stylesheet> 

В разрабатывающейся версии XSLT 2.0 определяется стандартная инструкция для генерирования многократных выводов. На практике она очень похожа на xalan:redirect или saxon:output, однако ей будет назначено стандартное имя. В последней версии проекта XSLT 2.0 (на момент написания статьи – 2 мая 2003 г.) эта инструкция называется xsl:result-document. В Листинге 4 демонстрируется ее использование. Обратите внимание, здесь уже используется таблица стилей XSLT 2.0, как заявлено в атрибуте версии.


Листинг 4. xsl2.xsl – таблица стилей XSLT 2.0 с новой инструкцией xsl:result-document
 <?xml version="1.0"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gl="http://ananas.org/2003/tips/gallery"> <xsl:output method="html"/> <xsl:template match="gl:gallery"> <xsl:apply-templates select="gl:photo"/> <html> <head><title><xsl:value-of select="gl:title"/></title></head> <body> <h2><xsl:value-of select="gl:title"/></h2> <p>The photos are <a href="photo-0.html">here</a>.</p> </body> </html> </xsl:template> <xsl:template match="gl:photo"> <xsl:result-document href="photo-{position()}.html"> <html> <head><title><xsl:value-of select="gl:title"/></title></head> <body> <img src="{gl:image}" align="left"/> <h2><xsl:value-of select="gl:title"/></h2> <p><xsl:value-of select="gl:date"/></p> <p><xsl:value-of select="gl:description"/></p> <p> <xsl:if test="preceding-sibling::gl:photo"> <a href="photo-{position() - 1}.html">Previous</a> <xsl:text> </xsl:text> </xsl:if> <xsl:if test="following-sibling::gl:photo"> <a href="photo-{position() + 1}.html">Next</a> </xsl:if> </p> </body> </html> </xsl:result-document> </xsl:template> </xsl:stylesheet> 

Заключение

При публикации Web-сайта вам может помочь разбиение одного XML-документа на несколько частей. Это упрощает загрузку и улучшает эффективность, кроме того, может помочь при работе с фреймами. Между тем, использование множественных выводов не ограничивается лишь публикацией. Эту методику можно использовать также в проектах электронной коммерции для разбиения больших результатов экспорта баз данных на меньшие, которыми легче управлять.

Загрузка кода примера

ИмяРазмерМетод загрузки
x-tipdivbigcode.zip  FTP

Ресурсы


Об авторе

Benoit Marchal является бельгийским консультантом. Он автор книги XML by Example, Second Edition и других книг по XML. Автор доступен для помощи в XML-проектах. С ним можно связаться по адресу [email protected] или через персональный сайт marchal.com.

Выскажите мнение об этой странице


Как разделить один большой XML-файл на несколько мелких

Программы

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

👍 Научим создавать сайты на WordPress бесплатно за 19 уроков. Подробнее →

Если вы будете экспортировать содержимое блога,используя стандартную функцию импорта в XML-фал, то при большом объеме информации может оказаться, что этот файл будет большого размера. Настолько большого, что потом вы не сможете импортировать из него данные, так как он будет превышать максимально допустимый при импорте размер в 2 мегабайта. Конечно, это слишком маленький размер, если речь идет об импорте большого блога с многолетней историей и тысячами постов и страниц. Приходится применять хитрые подходы к экспорту, создавая XML-файлы, содержащие только посты за один месяц, но в очень активных блогах даже такой подход может не всегда выручать. Найти выход из такого положения позволяет программа WXR File Splitter.

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

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

WXR File Splitter Мне нравитсяНе нравится

Как разделить yml-ссылку импорта на несколько частей? – tiu.ru

Рекомендуемый размер yml-файла до 180 МБ. 

Для файлов большего размера нужно разделить yml-ссылку на несколько частей:

  1. Скачать программу https://www.sublimetext.com/ и установить ее.
  2. Посчитать на сколько частей нужно разделить файл, чтобы каждый файл был нужного размера. Например, если файл 320 МБ, то нужно разделить его на две части.
  3. Создать в программе  SublimeText  нужное количество файлов.
  4. Скопировать в каждый файл шапку из текущего файла:
    Например,
    верх
    <yml_catalog date="2018-07-17 02:23"><shop><name>Alp</name><company>Alp</company><url>alp.com.ua</url><currencies><currency rate="1"/></currencies><categories><category>Гидрокостюмы</category></categories><offers>
    низ
    </offers></shop></yml_catalog>
  5. В каждый файл вставить между “верх” и “низ” скопированные части с информацией о товаре из исходного файла. Эти части должны начинаться с <offer id=...> и заканчиваться </offer>.
  6. Сохранить файлы с формате yml.
  7. Загрузить сохраненные файлы по инструкции.

QXmlEdit - XML-редактор

XML-редактор, основанный на Qt. Он может разделить очень большие файлы XML на фрагменты, и сравнить XML и XSD файлы.

Основные характеристики:

  • Иерархический настраиваемый вид XML элементов;
  • Быстрая навигация иерархии XML;
  • Разделение больших XML-файлов;
  • Поиск, поддерживающий выражения XPath;
  • Обработка данных Base64;
  • Пользовательские стили визуализации;
  • XML-схемы (XSD) для просмотра;
  • Столбчатый вид;
  • Обработка сессий;
  • Графическое представление XML-файла;
  • Представление карты XML-документа;
  • Разделение и извлечение фрагментов больших файлов XML;
  • Визуальное сравнение файлов XML-схем;
  • Визуальное сравнение из XML-файлов;
  • XML фрагменты;
  • XSL специализированный режим;
  • Анонимизация данных.

Для работы программы требуется QT библиотека версия 4.8 или выше. Поддерживается QT 5.

Язык: Английский
Лицензия:
GNU LGPL v2

Протестировано на ОС: Windows 7 x64, Windows 10 x64

Официальный сайт: qxmledit.org

Перейти в каталог загрузки на sourceforge

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

Резервная копия на Яндекс Диске, версия 0.9.9

Разбиваем большие XML файлы импорта для WordPress

В WordPress есть встроенная система импорта/экспорта, которая позволяет вам импортировать или экспортировать ваши записи WordPress в формат XML. При переезде, к примеру, на другой хостинг и домен иногда неожиданно оказывается, что файлы экспорта — больше чем лимит для загрузки файлов, установленный вашим хостером. В таких случаях у вас, как правило, два варианта. Первый — попросить вашего хостера увеличить максимальный размер для загружаемых файлов. Второй — просто разбить ваш xml-файлик на множество мелких, чтобы загрузить их последовательно, один за одним. В этой статье мы расскажем как разрезать большие XML файлы в WordPress.

Автоматически разбиваем большие файлы XML в WordPress

Даже если вы умеете вручную разбивать объемные XML-ки путем создания множества файлов с одинаковым хидером, рубриками и информацией в футере, а также разделяя остальные элементы. Но! У вас есть на это лишнее время? Для этого существуют отличные бесплатные инструменты, которые помогут вам справиться с задачей в несколько кликов.

Для пользователей ОС есть утилита под названием WordPress WXR File Splitter. Скачайте и установите эту программу. После того, как вы ее запустите, увидите такое окно:

Нажимаем на кнопку open WXR file для того, чтобы открыть экспортированный XML-файл. Утилита «прочитает» файл и отобразит полезную информацию о нем. Программа считает заголовок, футер и покажет количество элементов в файле.

Вы можете подобрать размер файла, когда будете разбивать большой файл на маленькие или же, можно указать количество мелких xml-ек. В любом случае, на выходе наш «толстый» файлик расколется на несколько мелких и вы сможете загрузить их без превышения аплоад-лимита хосстера. Когда вы выставите все настройки, нажимайте кнопку Split Files и программа сделает свою работу, положив мини-XMLки в ту же папку, где лежит ваш исходный файл экспорта.

Для пользователей Mac также есть подобного рода утилита. Называется она WordPress WXR Split utility. Принцип действия ее тот же, как и алгоритм использования.

Надеемся, что статья помогла вам разбить большие XML файлы импорта для WordPress и справится с лимитом на загружаемые в WordPress файлы. Если остались вопросы — милости просим в комментарии.

VN:F [1.9.22_1171]

Rating: 0.0/5 (0 votes cast)

Как Разбить Xml Файл На Несколько Файлов Xml

Я пытаюсь разбить XML файл на несколько небольших xml файлов в С#.net и am
пытаясь получить наилучший возможный подход к этому. Любая помощь по этому поводу будет
отличный пример... Пример того, что я пытаюсь сделать...


Исходный XML-документ

<?xml version="1.0" standalone="yes"?>
<DATABASE>
<DOC>
<DOCID>8510188</DOCID>
<ISSUE>2010</ISSUE>
<CAT>Literature and Art</CAT>
<TITLE>Test</TITLE>
<TEXT>Test</TEXT>
</DOC>
<DOC>
<DOCID>1510179</DOCID>
<ISSUE>2012</ISSUE>
<CAT>Miscellaneous</CAT>
<TITLE>Test</TITLE>
<TEXT>Test</TEXT>
</DOC>
</DATABASE>

Должен разбиться на два xml-документа, как показано ниже

1)

<?xml version="1.0" standalone="yes"?>
<DATABASE>
<DOC>
<DOCID>8510188</DOCID>
<ISSUE>2010</ISSUE>
<CAT>Literature and Art</CAT>
<TITLE>Test</TITLE>
<TEXT>Test</TEXT>
</DOC>
</DATABASE>

2)

<?xml version="1.0" standalone="yes"?>
<DATABASE>
<DOC>
<DOCID>1510179</DOCID>
<ISSUE>2012</ISSUE>
<CAT>Miscellaneous</CAT>
<TITLE>Test</TITLE>
<TEXT>Test</TEXT>
</DOC>
</DATABASE>

xml - XSLT-преобразование: группирование и разделение файла на части

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технолог
.

Java: Как разделить поток XML на небольшие документы XML с родительским узлом. VTD-XML

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
.

разбиение файлов xml на несколько файлов xml с использованием awk в Windows

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

c # - Как разбить файл CSV на части

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Смотрите также