<xsl:variable name="var" select="boolean('false')"/> <xsl:if test="$var'">variable is true</xsl:if>
它总是返回true,当它是假的。为什么?@H_301_4@
< xsl:variable name =“var”select =“boolean('false')”/>@H_301_4@
是@H_301_4@
真正()@H_301_4@
这是因为在XPath中“false”是一个普通的字符串,而不是false(),这是布尔值的构造函数false()@H_301_4@
XPath中的两个布尔值(注意它们是构造的!):@H_301_4@
true()和false()@H_301_4@
将任何值转换为布尔值的细节在XPath Spec中拼写出来:@H_301_4@
“boolean函数将其参数转换为布尔值,如下所示:@H_301_4@
>一个数字是真的,如果且仅当它
不为正或负零
也不是NaN
>节点集是真实的,如果且仅当它
是非空的
>一个字符串是真的,如果且仅当它的
长度不为零
>除了四种基本类型之外的类型的对象以取决于该类型的方式被转换为布尔值
“。@H_301_4@
在你的情况下,字符串“false”不是数字0,并且具有正长度,因此应用上面第三个项目中的规则,得到true()。@H_301_4@
因此,要在XSLT 1.0中定义一个变量,其值为false()
,需要将定义写为以下内容:@H_301_4@
< xsl:variable name =“vMyVar”select =“false()”/>@H_301_4@
或者,如果你不记得这一点,你可以总是写:@H_301_4@
< xsl:variable name =“vMyVar”select =“1 = 0”/>@H_301_4@
(指定评估为false()的任何表达式),XSLT处理器将为您完成工作。@H_301_4@
在XSLT 2.0中,最好明确指定变量的类型:@H_301_4@
< xsl:variable name =“vMyVar”as =“xs:boolean”select =“false()”/>@H_301_4@