XSL组元素

时间:2016-09-16 13:08:49

标签: xml xslt

我一直在尝试创建一个XSL转换,它将对XML元素进行分组和求和,但没有成功。

我的输入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 个答案:

答案 0 :(得分:0)

使用XSLT 2.0,您可以使用

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

http://xsltransform.net/ejivdGX在线。 (注意:使用<xsl:template match="*[Data]">主要是因为您没有显示Data元素的父元素的名称。