如果条件满足则汇总值

时间:2014-01-13 17:04:35

标签: xml xslt xpath xslt-2.0

例如,我有一个XML:

<?xml version="1.0"?>
<A>
    <B>
        <C>true</C>
        <D>5</D>
    </B>
    <B>
        <C>false</C>
        <D>6</D>
    </B>
    <B>
        <C>true</C>
        <D>10</D>
    </B>    
</A>

如果C=true我需要汇总来自D的值,在其他情况下只需返回原始D

当我使用for-each或分组时,如果条件得到满足,我找不到如何总结价值的方法

完全没用的代码:

<xsl:template match="/A">
    <xsl:for-each select="B">
        <xsl:value-of select="D"/>
        <xsl:text>&#10;</xsl:text> <!-- br -->
    </xsl:for-each>
</xsl:template>

我希望它返回:

15
6

2 个答案:

答案 0 :(得分:1)

我想你可以试试这个:

<xsl:value-of select="sum(//D[preceding-sibling::C ='true'])"/>

答案 1 :(得分:1)

如果您知道只有true值,您想要总结D值,那么您不需要分组,您只需计算总和并输出其他元素例如

<xsl:template match="/A">
  <xsl:value-of select="sum(B[C = 'true']/D), B[not(C = 'true')]/D" separator="&#10;"/>
</xsl:template>