2016-09-16 86 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元素的父元素的名称)。