我对 XSLT 完全陌生,无法弄清楚以下代码哪里出错了。
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
当它应该为假时,它总是返回真。为什么?
$var 变量的值定义在:
<xsl:variable name="var" select="boolean('false')"/>
是
true()
这是因为在 XPath 中 " false
" 是一个普通字符串,而不是false()
,它是boolean
值的构造函数false()
XPath 中的两个布尔值是(注意它们是构造的!):
true()
和 false()
XPath Spec中详细说明了将任何值转换为布尔值的详细信息。:
“布尔函数将其参数转换为布尔值,如下所示:
一个数为真当且仅当它既不是正零也不是负零也不是 NaN
一个节点集当且仅当它非空时为真
字符串为真当且仅当其长度非零
四种基本类型以外的类型的对象以依赖于该类型的方式转换为布尔值“
在您的情况下,字符串 "false" 不是数字 0 并且具有正长度,因此应用上面第三个项目符号中的规则,产生true()
.
因此,要在 XSLT 1.0 中定义一个值为 的变量, false()
需要编写如下定义:
<xsl:variable name="vMyVar" select="false()"/>
或者,如果您不完全记得这一点,您可以随时写:
<xsl:variable name="vMyVar" select="1 = 0"/>
(指定任何计算结果为false()
的表达式)并且 XSLT 处理器将为您完成工作。
在 XSLT 2.0 中,最好明确指定变量的类型:
<xsl:variable name="vMyVar" as="xs:boolean" select="false()"/>
您正在使用的 boolean() 函数确实在发挥作用。要使用明确的真假值,您应该使用以下函数:
<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>
仅供参考,根据MSDN 文档,boolean() 返回以下内容:
在这个阶段可能有点晚了,但 imo 处理布尔值是不值得的。以下是我如何处理从数据库返回的布尔值(强制):
<xsl:variable name="vTrue" select="true()"/>
<xsl:choose>
<xsl:when test="string(Mandatory) = string($vTrue)">
<xsl:text>Mandatory</xsl:text>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
希望这可以帮助某人