【问题标题】:Combine xml's and getting the ouput as a proper xml file合并 xml 并将输出作为正确的 xml 文件
【发布时间】:2012-07-06 03:57:40
【问题描述】:

我需要将 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>

是否可以更改我的脚本并得到我想要的?

【问题讨论】:

  • 苛刻,我的回答对你有用还是你还有问题?

标签: xml xslt xslt-1.0 xslt-2.0


【解决方案1】:

这种转换产生了想要的结果:

<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>

【讨论】:

  • 非常感谢您的回答,这可行,但我有一个小问题。当我手动将它们放入一个文件时,它比我使用你的方式时具有更多的信息。你能告诉我为什么会这样吗?
  • @harsh:“它有更多信息”是什么意思?请提供具体信息好吗?理想情况下,您将编辑问题,提供准确的 XML 文档(尽可能少且尽可能小)以及准确的所需结果。目前未提供此信息,因此建议的解决方案产生的结果与您想象的结果不同,这并不奇怪。
  • 文件很大。这就是为什么我没有发布它们。代码中避免了一些命名空间重复。所以更好。刚才注意到了,谢谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2016-10-24
  • 2012-04-24
  • 1970-01-01
  • 2012-08-16
相关资源
最近更新 更多