感谢大家花时间查看我的问题。
当节点值不同时,我无法对节点求和,但如果它是相同的则可以工作。
这是我的XML -
<statement>
<agency>
<employerShareAmt>75.00</employerShareAmt>
</agency>
<agency>
<employerShareAmt>76.00</employerShareAmt>
</agency>
</statement>
这是我的XSLT -
<xsl:template match="/">
<root>
<xsl:call-template name="shopData"/>
</root>
</xsl:template>
<xsl:template name="shopData">
<RESULT>
<xsl:call-template name="sum"/>
</RESULT>
</xsl:template>
<xsl:template match="node()|@*" name="sum">
<xsl:apply-templates select="node()|@*"/>
</xsl:template>
<xsl:template match="statement">
<agency>
<xsl:for-each-group select="agency"
group-by="employerShareAmt">
<employerShareAmt>
<xsl:value-of
select="sum(current-group()/employerShareAmt)"/>
</employerShareAmt>
</xsl:for-each-group>
</agency>
</xsl:template>
结果是75 76.但如果两者都是75,结果将是150。
我似乎是按值分组然后添加它们。如何让它按节点分组,以便上面的XML结果为151?
答案 0 :(得分:0)
您感觉样式表处理器按价值对代理商进行分组,然后将其employeesShareAmt元素汇总。你是对的。它是这样做的,因为你要求它这样做:这就是group-by="employerShareAmt"
所做的。
你要找的是什么?当前语句元素中所有employerShareAmt元素的总和?
<xsl:template match="statement">
<agency>
<employerShareAmt>
<xsl:value-of select="sum(agency/employerShareAmt)"/>
</employerShareAmt>
</agency>
</xsl:template>
特定代理商内所有employeesShareAmt元素的总和?对于您显示的输入,身份转换将做得非常好;否则
<xsl:template match="agency">
<agency>
<employerShareAmt>
<xsl:value-of select="sum(EmployerShareAmt)"/>
<employerShareAmt>
</agency>
</xsl:template>
具有相同代理商ID或名称的某些代理商组织的所有employeesShareAmt元素的总和或您未显示的其他某些属性的相等性?保留类似于您当前结构的东西,但是在代理商的正确财产上进行分组,而不是使用employerShareAmt的值。