2014-06-24 57 views
0

我有這樣的XML在一個文件下面拆分一個XML文件到多個XML文件,XSLT

<?xml version="1.0" encoding="utf-8"?> 
<document> 
    <file> <!--File1.xml--> 
    <content>content file 1</content> 
    </file> 
    <file> <!--File2.xml--> 
    <content>content file 2</content> 
    </file> 
    <file> <!--File3.xml--> 
    <content>content file 3</content> 
    </file> 
</document> 

我怎樣寫一個XSLT來打破它給多個文件,如下面

File1.xml 
<?xml version="1.0" encoding="utf-8"?> 
<document> 
    <file> 
    <content>content file 1</content> 
    </file> 
</document> 

File2.xml 
<?xml version="1.0" encoding="utf-8"?> 
<document> 
    <file> 
    <content>content file 2</content> 
    </file> 
</document> 

等..

謝謝你的幫助。

+0

您能夠使用XSLT 2.0嗎?如果是這樣,你應該可以使用「結果文件」。請參閱http://www.saxonica.com/documentation/xsl-elements/result-document.html –

+0

我相信我們只能使用XSLT 1.0。 :( – zyberjock

+0

您是否真的必須在這裏使用XSLT?如果您使用.Net進行轉換,只需將XML加載到XDocument中,選擇所有**文件**元素,遍歷它們並輸出文件 –

回答

2

用XSL 2.0:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="/"> 
     <xsl:for-each select="document/file"> 
      <xsl:result-document href="file{position()}.xml"> 
       <document> 
        <xsl:copy-of select="current()"/> 
       </document> 
      </xsl:result-document> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

我測試此使用Saxon,它支持XSLT 2.0,使用下面的命令:

java -jar saxon9.jar -xsl:transform.xsl -s:input.xml 

此命令生成三個文件:file1.xmlfile2.xmlfile3.xml

$ cat file1.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<document> 
    <file> <!--File1.xml--> 
    <content>content file 1</content> 
    </file> 
</document> 
+0

在XSL 1.0中怎麼樣,它可行嗎? – zyberjock

+0

因爲儘可能多我們希望避免使用第三方組件,我們使用.Net進行轉換。謝謝 – zyberjock

+0

不在XSL 1.0中。另一種方法是在.Net中使用xml解析。例如,使用xpath(/ document/file)來獲取所有文件元素,然後遍歷它們,寫出每個文件元素。 – dogbane

相關問題