В моем проекте есть модуль отчетности, который собирает данные из базы данных в форме XML и запускает на нем XSLT для генерации желаемого пользователем формата отчета. Варианты на данный момент: HTML и CSV.
Мы используем Java и Xalan для всех взаимодействий с данными.
Плохая часть заключается в том, что один из этих отчетов, который пользователь может запросить, занимает 143 МБ (около 430 000 записей) только для части XML. Когда это преобразуется в HTML, у меня заканчивается пространство кучи с максимумом 4096G, зарезервированным для кучи. Это недопустимо.
Кажется, что проблема заключается просто в слишком большом количестве данных, но я не могу помочь, но думаю, что есть лучший способ справиться с этим, чем ограничение клиента и неспособность удовлетворить функциональные требования.
Я рад предоставить больше информации по мере необходимости, но я не могу раскрывать слишком много информации о проекте, поскольку я уверен, что большинство из вас понимают. Кроме того, ответ - да; Мне нужны все данные одновременно: я не могу разбить их на страницы.
Спасибо
EDIT
Все используемые мной классы преобразования находятся в пакете javax.xml.transform. Реализация выглядит так:
final Transformer transformer =
TransformerFactory.newInstance().newTransformer(
new StreamSource(new StringReader(xsl)));
final StringWriter outWriter = new StringWriter();
transformer.transform(
new StreamSource(new StringReader(xml)), new StreamResult(outWriter));
return outWriter.toString();
Если возможно, я бы хотел оставить XSLT таким, какой он есть. Метод StreamSource
должен позволять мне собирать некоторые данные по мере их обработки, но я не уверен, какие ограничения на XSLT (функции и т. Д.) Могут потребоваться для правильной очистки. Если бы кто-то мог указать мне на ресурс с подробным описанием этих ограничений, это было бы очень полезно.