合并xmls并将输出作为正确的xml文件

时间:2012-07-06 03:57:40

标签: xml xslt xslt-1.0 xslt-2.0

我需要将4个xml文件合并为一个。它们如下。 文件1

<doc1>
....
<doc1>

文件2

<doc2>
....
<doc2>

文件3

<doc3>
....
<doc3>

文件4

<doc4>
....
<doc4>

我想要输出如下

<doc1>
....

<doc2>
....
</doc2>


<doc3>
....
</doc3>


<doc4>
....
</doc4>
</doc1>

我这样做了。

<xsl:transform version="2.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
      <xsl:copy-of select="document('doc1.xml')"/>
      <xsl:copy-of select="document('doc2.xml')"/>
      <xsl:copy-of select="document('doc3.xml')"/>
      <xsl:copy-of select="document('doc4.xml')"/>
  </xsl:template>
</xsl:transform>

但我获得的输出如下

<doc1>
....
</doc1>


<doc2>
....
</doc2>


<doc3>
....
</doc3>


<doc4>
....
</doc4>

是否可以更改我的脚本并获得我想要的内容?

1 个答案:

答案 0 :(得分:0)

此转换产生想要的结果:

<xsl:transform version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
          <xsl:for-each select="document('doc1.xml')/*">
            <xsl:copy>
             <xsl:copy-of select="@*|node()"/>

             <xsl:copy-of select="document('doc2.xml')"/>
             <xsl:copy-of select="document('doc3.xml')"/>
             <xsl:copy-of select="document('doc4.xml')"/>
            </xsl:copy>
          </xsl:for-each>
      </xsl:template>
</xsl:transform>