我有很多想要用 Xslt 2.0 转换的 xml(JUnit 测试结果)。
我目前正在使用 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>
有两点给我带来麻烦:
首先是 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>
但我的堆空间仍然出现错误。难道我做错了什么?