У меня есть большой XML-файл (6 ГБ) с таким деревом:
<Report>
<Document>
<documentType>E</documentType>
<person>
<firstname>John</firstname>
<lastname>Smith</lastname>
</person>
</Document>
<Document>
[...]
</Document>
<Document>
[...]
</Document>
[...]
</Report>
Если я применяю к нему таблицу стилей XSLT, у меня возникает такая ошибка:
Исключение в потоке "main" java.lang.OutOfMemoryError: пространство кучи Java
Итак, я хотел попробовать новую функцию XSLT 3.0: потоковую передачу с Saxon 9.6 EE. Я не хочу иметь ограничения потоковой передачи один раз в документе. Я думаю, что то, что я хочу сделать, очень близко к "пакетному режиму", описанному здесь: http://saxonica.com/documentation/html/sourcedocs/streaming/burst-mode-streaming.html.
Вот моя командная строка Saxon:
java -cp saxon9ee.jar net.sf.saxon.Transform -t -s: input.xml -xsl: stylesheet.xsl -o: output / output.html
Вот моя таблица стилей XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:mode streamable="yes" />
<xsl:template match="/">
GLOBAL HEADER
<xsl:iterate select="copy-of()/Report/Document" >
DOC HEADER
documentType: <xsl:value-of select="documentType"/>
person/firstname: <xsl:value-of select="person/firstname"/>
DOC FOOTER
<xsl:next-iteration/>
</xsl:iterate>
GLOBAL FOOTER
</xsl:template>
</xsl:stylesheet>
Но у меня все еще такая же ошибка нехватки памяти.
Спасибо за помощь!