我是XSLT的新手,无法解决以下代码出错的问题。
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
当意图是虚假时,它总是返回true。为什么呢?
答案 0 :(得分:164)
$ var变量的值,如:
中所定义 <xsl:variable name="var" select="boolean('false')"/>
是
<强> true()
强>
这是因为在XPath中“false
”是一个普通字符串,而不是false()
,它是boolean
值false()
的构造函数
XPath中的两个布尔值(请注意它们是构造的!):
true()
和 false()
将任何值转换为布尔值的详细信息在XPath Spec中拼写出来。:
“boolean函数将其参数转换为布尔值,如下所示:
当且仅当它是一个数字时才是真的 既不是正数也不是负数 也不是NaN
当且仅当时,节点集为真 是非空的
当且仅当字符串为真时,该字符串为真 长度不为零
除了四种基本类型之外的类型的对象将以依赖于该类型的方式转换为布尔值 “
在您的情况下,字符串“false”不是数字0并且具有正长度,因此应用上面第3个项目符号中的规则,产生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()"/>
答案 1 :(得分:17)
你正在使用的boolean()函数确实在做它的工作。要使用显式的true和false值,您应该使用以下函数:
<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>
只是FYI,根据MSDN documentation,boolean()返回以下内容:
答案 2 :(得分:5)
在这个阶段可能有点晚了,但imo处理布尔值是不值得的。下面是我如何处理从DB返回的布尔值(强制性):
<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>
希望这有助于某人