2016-09-16 105 views
0

我一直在試圖創建一個XSL轉換,它將對XML元素進行分組和總結,但沒有成功。XSL組元素

我輸入XML:

<Data> 
     <ElementOne>10</ElementOne> 
     <ElementTwo>20</ElementTwo> 
     <ElementFour>30</ElementThree> 
     ... a lot more elements ...  
    </Data> 

    <Data> 
     <ElementOne>100</ElementOne> 
     <ElementTwo>200</ElementTwo> 
     <ElementFour>300</ElementThree> 
     ... 
    </Data> 

    ... more data elements 

,我想創建的XML:

<Summary> 
    <ElementOne>110</ElementOne> <!-- sum of all ElementOne values in the input--> 
    <ElementTwo>220</ElementTwo> 
    <ElementFour>330</ElementThree> 
    .... 
</Summary> 

我知道我可以使用像這樣得到的總和:

<ElementOne><xsl:value-of select="sum(Data/ElementOne)</ElementOne> 

這個問題是我必須通過名稱來指定每個元素,這是我試圖避免的。有沒有辦法做到這一點?

+1

您使用的是XSLT 1.0還是2.0? –

+0

我正在使用XSLT 2.0 –

回答

0

使用XSLT 2.0,你可以在http://xsltransform.net/ejivdGX使用

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

<xsl:output indent="yes"/> 

<xsl:template match="*[Data]"> 
    <Summary> 
     <xsl:for-each-group select="Data/*" group-by="node-name(.)"> 
      <xsl:copy> 
       <xsl:value-of select="sum(current-group())"/> 
      </xsl:copy> 
     </xsl:for-each-group> 
    </Summary> 
</xsl:template> 
</xsl:transform> 

在線。 (注意:使用<xsl:template match="*[Data]">主要是因爲您沒有顯示Data元素的父元素的名稱)。