Мы используем XSLT для генерации отчетов наших данных. Данные в настоящее время хранятся в Oracle как XML-документы (не используя XMLTYPE, а обычный CLOB). Мы выбираем правильные XML-документы и создать единый документ:Преобразования XSLT на очень большие файлы
<DATABASE>
<XMLDOCUMENT> ... </XMLDOCUMENT>
<XMLDOCUMENT> ... </XMLDOCUMENT>
...
</DATABASE>
В некоторых случаях полный документ XML содержит +100000 документы. Это означает, что сначала загружается огромный XML-документ в память, что вызывает все проблемы памяти.
Как мы можем предотвратить это? Мы используем класс XslCompiledTransform
в .NET 2.0.
Я знаю, что существует 2 формы анализа XML-документов: DOM и SAX. Но, как я понимаю, SAX-путь невозможен в сочетании с XSLT. Метод разбора DOM заставляет нас загружать всю вещь в память.
Каковы наши варианты? Помогает ли он сначала записать полный документ на диск? Означает ли Oracle лучшую работу над большими преобразованиями XSLT?
Насколько сложным является содержание XMLDOCUMENT? И насколько сложна трансформация XSLT? Может быть, стоит изменить XSLT на что-то более легкое? –
Проблема в том, что мы намерены использовать это как механизм общего отчета. Нельзя сказать, насколько сложным будет XSLT. Это может быть простой экспорт CSV или вычисление со средними значениями и т. Д. –
SAX может использоваться как вход с некоторыми XSLT-процессорами, например. Саксон [http://saxon.sourceforge.net/]. Однако в общем случае процессор XSLT построит внутреннее представление целого числа данных, которое будет линейно расти в памяти с размером входных данных. Может быть возможно использовать оптимизацию, специфичную для данного процессора, для запуска преобразования в потоковом режиме. Другим решением может быть ограничение количества выбранных элементов и обработка данных в несколько раз.Возможно, вам придется сократить преобразование в несколько этапов. –