我有以下代码行,当我使用xslt 1.0时没有问题,但在2.0中它给了我错误
XPath 2.0表达式除以零
<xsl:variable name="avg" select="round($sum div $count)"/>
当我尝试搜索各种网站但无法找到问题的答案时,是否有某种方法可以处理。
答案 0 :(得分:2)
变量表达部分取自迈克尔的解决方案
<xsl:variable name="avg" select="if ($count=0) then 0 else round($sum div $count)"/>
<xsl:choose>
<xsl:when test="$avg=0">
'action here
</xsl:when>
<xsl:otherwise>
'action here
</xsl:otherwise>
</xsl:choose>
我认为我对结果感到满意
答案 1 :(得分:2)
如果要复制1.0行为,只需确保使用双重算术而不是整数或小数。您可以通过将类型as="xs:double"
添加到变量$ sum的声明(变量$ count通常将声明为xs:integer
)来实现此目的。声明变量和参数的类型是XSLT 2.0中的基本代码清洁。
如果您想使用十进制算术并从错误中恢复,例如通过为这种情况返回一个空序列,然后使用条件表达式:
<xsl:variable name="avg"
as="xs:decimal?"
select="if ($count=0) then () else round($sum div $count)"/>