使用结果文档和javax.xml.transform.Transformer分割xml文件

时间:2010-01-11 06:07:36

标签: xslt

我有一个XSLT,它将使用以下xslt代码将大型xml文件拆分为多个xml文件。

<xsl:variable name="filename" select="resolve-uri(concat('splitfilesfolder/',position(),'.xml'))" /> 
 <xsl:result-document href="{$filename}" format="xml">
    <--XML file content --->
 </xsl:result-document>

然后我在我的代码中使用了XSLT来使用javax.xml.transform.Transformer分割输入XML文件。

TransformerFactory tFactory = TransformerFactory.newInstance();
Source xslSource =  new StreamSource(xsltfilepath);

Transformer trans = tFactory.newTransformer(xslSource);
trans.transform(new StreamSource(xmlFileName), new StreamResult(splitfilesfolder));

这里我想为新的Streamresult提供相同的路径,因为它在结果文档路径中如何使用result doucment和javax.xml.transform.Transform转换多个xml文件?

有人可以给我一个解决方案吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

<xsl:result-document>在XSLT 2.0中javax.xml.transform不支持​​XSLT 2.0,所以我觉得你使用内置变换器是不合时宜的。

请尝试使用Saxon。只需将jar文件添加到类路径中即可进行设置。

您的XSLT中也有错误

 <xsl:result-document href="{$filename}" format="xml">

应该是

 <xsl:result-document href="{$filename}" method="xml">

要将目录放入XSLT我会使用

爪哇

trans.setParameter("dir", "dirname");

XSL

<xsl:param name="dir"/>

答案 1 :(得分:0)

直接创建Saxon的TransformerFactory实例,即     TransformerFactoryImpl factory = new TransformerFactoryImpl(); 不要使用脑死亡的JAXP     TransformerFactory.newInstance(); ......因为你显然得到的不仅仅是撒克逊人的实力。