XSLT для обработки огромных файлов XML (почти 5 ГБ)

1

Я пытаюсь найти последовательное решение, используя XSLT для преобразования огромных XML файлов (почти 5 ГБ)

Это то, что я пробовал до сих пор:

  1. Использование MSXML Parser 4.0 (SP3) из командной строки:

> msxsl.exe myfile.xml mysheet.xslt -o output.xml

В этом заканчивается память (код: 0x8007000e) с файлами размером более 800 МБ.

  1. Использование Mozilla Firefox или IE с использованием XSLT с помощью инструкции по обработке:

<? xml version = '1.0' encoding = 'UTF-8'?>

<? xml-stylesheet href= "mysheet.xslt" type = "text/xsl"?>

<Корень>...

Браузер падает через пару минут.

  1. Попытка написать собственный XML-Reader в PHP (Ver 5.4.22) в Windows и выбрать элементы, которые мне нужны с XPath

<? PHP

ini_set ('max_execution_time', 0);

ini_set ('memory_limit', '-1');

$ xml = simplexml_load_file ('myfile.xml');

foreach ($xml-> xpath ('/root/node/atribute [@id = "значение"]') как $ result) {

...

......

}

.........

Сбой сервера Apache.

Расскажите о своем опыте в этой области... А как насчет написания класса на Java?

PS Я не хочу использовать программное обеспечение, такое как XmlSplit или что-то в этом роде!

  • 0
    Как насчет любого XSLT-процессора, созданного для 64-битной системы на компьютере с достаточным объемом оперативной памяти? Держу пари, что не так много других вариантов, так как из-за природы XSLT большинство процессоров написаны для загрузки всего документа в дерево DOM. В противном случае, я бы сказал, мусор XSLT. Вам нужно использовать другой способ, который не предполагает загрузку всего документа в память перед обработкой.
  • 0
    как насчет разделения файла на куски.
Показать ещё 8 комментариев
Теги:
xpath
xslt

1 ответ

3

Для исходного документа 5Gb вам понадобится потоковый процессор, а это означает XSLT 3.0, который в настоящее время имеет две реализации: Saxon-EE и Exselt. Конечно, не все преобразования являются потокобезопасными (например, сортировка сложна), но если вы описываете преобразование, которое хотите выполнить, или даете ему версию без потоковой передачи, то я уверен, что мы можем помочь вам превратиться в то, что работает при потоковой передаче.

  • 1
    Я использовал Saxon для обработки 2 ГБ XML-файлов с невероятной скоростью. Забудьте о попытке загрузить все это в память, это действительно не очень хороший подход для больших файлов. Потоковая передача - это способ, когда это возможно, что обычно происходит в большинстве случаев с небольшими размышлениями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню