全部,
这个问题与XSLT1.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个关键字值
仅选择内容(以数字表示)大于零的value
节点:
<xsl:variable name="values" select="servicelevels/servicelevel/value[number(.) > 0]"/>
平均值:
<xsl:value-of select="sum($values) div count($values)"/>