2012-07-06 70 views
1

我有一個要求將4個xml文件合併爲一個文件。他們如下所示。 文獻1結合xml並將輸出作爲正確的xml文件

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

是否有可能改變我的劇本,並得到我想要什麼?

+0

惡劣,是我的回答對你有用還是你仍然有問題? – 2012-07-06 13:50:54

回答

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

非常感謝答案,這有效,但我有一個小問題。當我手動將它們放入一個文件時,它比我用自己的方式使用更多的信息。你能告訴我爲什麼會發生這種情況嗎? – harsh 2012-07-06 14:57:03

+0

@harsh:「它有更多的信息」是什麼意思?你能提供具體的信息嗎?理想情況下,您將編輯問題,提供確切的XML文檔(儘可能少和儘可能小)以及確切的想要的結果。目前沒有提供這方面的信息,因此建議的解決方案產生的結果與您想象的*結果必須是不同的。 – 2012-07-06 15:07:33

+0

這些文件非常大。這就是爲什麼我沒有發佈他們。代碼中避免了一些名稱空間重複。所以更好。剛纔注意到了,謝謝。 :) – harsh 2012-07-06 15:23:03