2010-01-11 54 views
4

我有一個XSLT,它將使用以下xslt代碼將大型xml文件拆分爲多個xml文件。使用結果文檔和javax.xml.transform.Transformer拆分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因爲它是在結果文件的路徑我如何使用效果doucment和javax.xml.transform.Transform轉換多個XML文件?

任何人都可以給我一個解決方案嗎?

在此先感謝。

回答

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我會使用

的Java

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

XSL

<xsl:param name="dir"/> 
+0

感謝彼得,我已經解決了我的問題,你有什麼建議。 我已經使用Saxon作爲結果文檔並分割文件。 – 2010-02-02 04:58:20

+0

然後,我懇請您將我的答案標記爲「已接受」 – 2010-02-02 07:36:28

0

直接創建Saxon的的TransformerFactory的一個實例,即 TransformerFactoryImpl工廠=新TransformerFactoryImpl(); 不要使用腦死JAXP TransformerFactory.newInstance(); ......因爲你清楚地得到了除撒克遜的暗示之外的東西。

+0

從Java 1.6開始,您可以確保使用TransformerFactory.newInstance(「net.sf.saxon.TransformerFactoryImpl」,null)''獲得所需的實現,例如。 – 2014-07-07 07:54:25