2013-05-21 105 views
0

我想通過以下方式多個XML文件合併成一個XML文件:動態包括使用XSLT

說我有一個XML文件,名爲fruit.xml

<fruit> 
    <apples> 
     <include ref="apples.xml" /> 
    </apples> 
    <bananas> 
     <include ref="bananas.xml" /> 
    </bananas> 
    <oranges> 
     <include ref="oranges.xml" /> 
    </oranges> 
</fruit> 

和隨後的XML文件從fruit.xml引用,例如像apples.xml

<fruit> 
    <apples> 
     <apple type="jonagold" color="red" /> 
     <... /> 
    </apples> 
</fruit> 

等等......我想這些合併成1個XML文件,,比如s UCH:

<fruit> 
    <apples> 
     <apple type="jonagold" color="red" /> 
     <... /> 
    </apples> 
    <bananas> 
     <banana type="chiquita" color="yellow" /> 
     <... /> 
    </bananas> 
    <oranges> 
     <orange type="some-orange-type" color="orange" /> 
     <... /> 
    </oranges> 
</fruit> 

我想確定的「孩子」文件(如apples.xmlbananas.xml等),動態地根據在fruits.xml<include>元素ref屬性的值,然後將它們包括在輸出中。

這可能使用XSLT嗎?

回答

1

如果只有一個文件的抗衡應包括您可以使用:

<xsl:copy-of select="document(@ref)/fruit/*/*"/> 

因此試試這個:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 

    <xsl:output indent="yes" method="xml" encoding="utf-8" omit-xml-declaration="yes" /> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="include"> 
     <xsl:copy-of select="document(@ref)/fruit/*/*"/> 
    </xsl:template> 
</xsl:stylesheet> 
+0

非常感謝你,它的工作原理!我正在嘗試在後續文件中處理''元素,例如: ' '而不是'',但結果是''。有小費嗎? – pancake

+0

取消那個,已經修好了:我刪除了'