2016-09-16 5 views
0

XML要素をグループ化して合計するXSL変換を作成しようとしていましたが、成功しませんでした。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> 

この問題は、私が避けようとしている名前で各要素を指定しなければならないということです。これを行う方法はありますか? XSLT 2.0を使用して

+1

XSLT 1.0または2.0を使用していますか? –

+0

私はXSLT 2.0を使用しています –

答えて

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> 

Onlineを使用することができます。 (注:<xsl:template match="*[Data]">の使用は、主にData要素の親要素の名前を表示しなかったために行われます)。