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

Xml 如何处理XPath 2.0表达式中被零除的错误,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,我有下面一行代码,当我使用XSLT1.0时,没有问题,但在2.0中,它给了我错误 XPath 2.0表达式除零 当我尝试搜索各个站点但无法找到问题的答案时,是否有某种方法可以解决这个问题。变量表达式部分取自michael的解决方案 <xsl:variable name="avg" select="if ($count=0) then 0 else round($sum div $count)"/> <xsl:choose> <xs

我有下面一行代码,当我使用XSLT1.0时,没有问题,但在2.0中,它给了我错误

XPath 2.0表达式除零



当我尝试搜索各个站点但无法找到问题的答案时,是否有某种方法可以解决这个问题。

变量表达式部分取自michael的解决方案

<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.0的行为,只要确保你使用的是双精度算术,而不是整数或小数。您可以通过将类型
as=“xs:double”
添加到变量$sum的声明中来实现这一点(变量$count通常声明为
xs:integer
)。声明变量和参数的类型是XSLT2.0中的基本代码

如果要使用十进制算术并从错误中恢复,例如,通过在这种情况下返回空序列,则使用条件表达式:

<xsl:variable name="avg"
     as="xs:decimal?" 
     select="if ($count=0) then () else round($sum div $count)"/>


@Flynn1179您能建议怎么做吗?您不能在变量中使用xs:decimal,因为它会导致xpath 2.0错误。它不应该导致错误。也许您未能声明名称空间?否则,请告诉我们它会导致什么错误。
<xsl:variable name="avg"
     as="xs:decimal?" 
     select="if ($count=0) then () else round($sum div $count)"/>