XSLT:仅在值大于nul时计数

时间:2014-11-11 16:50:43

标签: xslt-1.0

所有

此问题与XSLT 1.0

有关

有没有办法只计算特定值大于null的节点? 我使用sum函数得到总数:

<servicelevels>
    <servicelevel>
        <key>0..20</key>
        <value>100.00</value>
    </servicelevel>
    <servicelevel>
        <key>20..30</key>
        <value>0.00</value>
    </servicelevel>
    <servicelevel>
        <key>30..40</key>
        <value>0.00</value>
    </servicelevel>
    <servicelevel>
        <key>40..50</key>
        <value>0.00</value>
    </servicelevel>
    <servicelevel>
        <key>50..60</key>
        <value>0.00</value>
    </servicelevel>
    <servicelevel>
        <key>60..70</key>
        <value>0.00</value>
    </servicelevel>
    <servicelevel>
        <key>70+</key>
        <value>98.33</value>
    </servicelevel>
</servicelevels>

要查找值键的总和,我使用:

<xsl:value-of select="sum(servicelevels/servicelevel/value | servicelevels/servicelevel/value)"/>

什么产生198.33的总和来计算7个节点的平均值我使用 xsl:value-of select="count(....)" 计算它为28.333但是我只想找到包含实际值的节点的平均值例子只有2个节点,平均值为99.165。

是否有另一种(相对简单的)实现此目的的方法?

XML始终包含7个键值

1 个答案:

答案 0 :(得分:1)

仅选择内容(作为数字)大于零的value个节点:

<xsl:variable name="values" select="servicelevels/servicelevel/value[number(.) &gt; 0]"/>

平均:

<xsl:value-of select="sum($values) div count($values)"/>