2015-11-14 39 views
0

我想從225個不同文件中採用完全相同格式的相同元素,並使用XSL將它合併到一個文件中。每個文件看起來是這樣的:合併多個XML文件中的select元素

<thickness_metafile> 
    <job_bundle> 
     <analysis_description> 
      <material_table> 
       material 
       </material_table> 
       <thickness_set> 
       ray element 1 
       ray element 2 
       ray element 3 
       </thickness_set> 
     </analysis_description> 
</job_bundle> 

因爲一切從每個文件是除了部分是相同的,我想每個thickness_set從過去的224個文件它們複製並粘貼到第一個文件直接在第一個thickness_set下面。從本質上講,我想輸出看起來像這樣:

<thickness_metafile> 
    <job_bundle> 
     <analysis_description> 
      <material_table> 
       material 
       </material_table> 
       <thickness_set> 
       ray element 1 
       ray element 2 
       ray element 3 
       </thickness_set> 
       <thickness_set> 
       ray element 4 
       ray element 5 
       ray element 6 
       </thickness_set> 
       <thickness_set> 
       ray element 7 
       ray element 8 
       ray element 9 
       </thickness_set> 
     </analysis_description> 
</job_bundle> 

應該有225套的厚度在最後編輯的文件。我已經嘗試了一些成功的東西,但輸出格式不符合我的喜好。

回答

0

假設我們有名稱爲「file1.xml」,「file2.xml」,「file3.xml」等的xml文件。我們可以使用遞歸調用模板中的xsl處理它們:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

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

    <xsl:template match="thickness_set"> 
     <xsl:copy> 
      <xsl:value-of select="."/> 
     </xsl:copy> 
     <xsl:call-template name="file-loop"> 
      <!-- continue with file number 2 --> 
      <xsl:with-param name="count" select="2"/> 
     </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="file-loop"> 
     <xsl:param name="count"/> 

     <!-- no more than 226 files --> 
     <xsl:if test="$count &lt; 226"> 
      <thickness_set> 
       <xsl:variable name="fi" select="document(concat('file',$count,'.xml'))"/> 
       <xsl:value-of select="$fi//thickness_set"/> 
      </thickness_set> 
      <xsl:call-template name="file-loop"> 
       <xsl:with-param name="count" select="$count+1"/> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 

</xsl:stylesheet> 

第一個XML文件(任何名稱),我們通過在XSL。其他名稱爲「file2.xml」等的文件會自動加載。