У меня есть много xml (результатов теста JUnit), которые я хочу преобразовать с помощью Xslt 2.0.
В настоящее время я использую net.sf.saxon.TransformerFactoryImpl
для выполнения преобразования и fn:collection()
в моем xslt для поиска XML-файлов.Как это:
<xsl:variable name="files" select="collection('file:///Users/admin/Documents/testxml/?select=*.xml;recurse=yes')"/>
<xsl:template match="testsuites">
<root>
<xsl:for-each select="$files//testsuites">
<xsl:call-template name="summary"/>
</xsl:for-each>
</root>
</xsl:template>
Есть 2 пункта, которые вызывают у меня проблемы:
Сначала это Java-преобразователь, я должен передать XML "источник", но яэто действительно не нужно, потому что мой .xsl выполняет поиск и перечисление в формате xml.
секунда - это когда я выполняю преобразование более 10 (возможно, 8 или 7) xml кучи JVMпространство заполнено.Я знаю, что могу увеличить размер кучи, но мне нужно применить преобразование через почти 300 xml, чтобы оно не было эффективным.
Любая идея о том, что я могу сделать, чтобы улучшить количествоXML я могу преобразовать?
Спасибо
РЕДАКТИРОВАТЬ:
Я пытаюсь использовать saxon:discard-document()
, как это:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:saxon="http://saxon.sf.net/">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="files" select="collection('file:///Users/admin/Documents/testxml/?select=*.xml;recurse=yes')"/>
<xsl:template match="testsuites">
<root>
<xsl:for-each select="for $x in ($files//testsuites)return saxon:discard-document($x)">
<xsl:call-template name="summary"/>
</xsl:for-each>
</root>
</xsl:template>
но явсе еще получаю ошибку с моим пространством кучи.Я делаю что-то неправильно?