如何处理XPath 2.0表达式中的错误除以零

时间:2013-11-18 22:26:02

标签: xml xslt xslt-2.0

我有以下代码行,当我使用xslt 1.0时没有问题,但在2.0中它给了我错误

  

XPath 2.0表达式除以零

<xsl:variable name="avg" select="round($sum div $count)"/>

当我尝试搜索各种网站但无法找到问题的答案时,是否有某种方法可以处理。

2 个答案:

答案 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)"/>