Java xslt xsl:结果文档覆盖文件

Java xslt xsl:结果文档覆盖文件,java,xml,xslt,Java,Xml,Xslt,大家好,我有xsl脚本,它可以将xml转换为csv并通过将结果保存到文件,但我有一个问题。在每次xml转换之后,它会覆盖结果文件,而我会丢失上一次转换的结果。如何转换100000 xml,并在一个文件中获取所有数据? 我使用的是xsl 2.0版。一般来说,对于XSLT2或3,如果您想要创建一个将多个文件转换为单个结果的转换,我建议从一个命名模板开始;在XSLT 3中,您有xsl:template name=xsl:initial template,在XSLT 2中,您需要使用任何要用作入口点的模

大家好,我有xsl脚本,它可以将xml转换为csv并通过将结果保存到文件,但我有一个问题。在每次xml转换之后,它会覆盖结果文件,而我会丢失上一次转换的结果。如何转换100000 xml,并在一个文件中获取所有数据?
我使用的是xsl 2.0版。

一般来说,对于XSLT2或3,如果您想要创建一个将多个文件转换为单个结果的转换,我建议从一个命名模板开始;在XSLT 3中,您有xsl:template name=xsl:initial template,在XSLT 2中,您需要使用任何要用作入口点的模板名称,例如xsl:template name=main

至于输入文档,根据处理器的不同,您可能可以使用uri集合XSLT 3或至少使用集合函数XSLT 2来处理输入文档的集合,例如在Saxon 9中,要处理来自特定目录的所有.xml文档,您可以使用例如uri-collection'file:/root/dir/subdir/?select=*.xml'

然后可以将这样的集合推送到现有模板中,只需确保使用xsl:result文档一次,例如

<xsl:param name="folder-uri" as="xs:string">file:/root/dir/subdir/</xsl:param>

<xsl:template name="xsl:initial-template">
  <xsl:result-document href="result.csv" method="text">
     <xsl:apply-templates select="uri-collection($folder-uri || '?select=*.xml') ! doc(.)/*"/>
  </xsl:result-document>
</xsl:template>

要从命名模板开始运行这种转换,我建议不要使用JAXP API,因为JAXP API只需要一个源代码,而使用专门设计用于XSLT 2或3的API,也就是说,在Saxon 9的情况下,s9api带有XsltTransformer或Xslt30Transformer。

为uniq组合附加一些时间部分或某些元素位置,或者您可以使用generate_id函数concat filename生成uniq组合,如果我处理1000个xml文件,我将有1000个文件?您可以处理任意多的文件。我必须只有一个输出文件包含来自1000个xml的所有数据,而不是1000个文件完成后,我尝试转换1000个xml文件并获得1000个结果文件,但我只需要一个包含所有数据的文件。