0

感谢大家花时间查看我的问题。

当节点值不同时,我无法对节点求和,但如果它相同则可以工作。

这是我的 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?

4

1 回答 1

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 元素的总和,或者与您未显示的某些其他属性相同?保留与您当前结构类似的内容,但要根据机构的正确财产分组,而不是根据雇主ShareAmt 的价值。

于 2013-06-04T22:23:01.723 回答