我一直在尝试创建一个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>
这个问题是我必须按名称指定每个元素,这是我试图避免的。有没有办法做到这一点?
答案 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
元素的父元素的名称。