我对XSLT完全陌生,无法通过以下代码找出我哪里出错了。
<xsl:variable name="var" select="boolean('false')"/>
<xsl:if test="$var'">variable is true</xsl:if>
当本应为假时,它始终返回true。为什么?
Answers:
$ var变量的值,定义如下:
<xsl:variable name="var" select="boolean('false')"/>
是
true()
这是因为在XPath中,“ false
”是一个普通字符串,而不是false()
,它是该boolean
值的构造函数false()
XPath中的两个布尔值是(请注意,它们是构造好的!):
true()
和 false()
XPath Spec中详细说明了将任何值转换为布尔值的细节。。
“布尔函数将其参数转换为布尔值,如下所示:
当且仅当它既不是正负零也不是NaN时,数字才为真
当且仅当节点集为非空时,节点集才为true
当且仅当其长度为非零时,字符串才为true
除四种基本类型以外的其他类型的对象将以依赖于该类型的方式转换为布尔值“
在您的情况下,字符串“ 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()"/>
false
,并true
从该文件下,不涉及字符串对比转型是未来的字符串?
您正在使用的boolean()函数确实可以完成它的工作。要使用显式的true和false值,应使用以下函数:
<xsl:variable name="var_false" select="false()"/>
<xsl:variable name="var_true" select="true()"/>
仅供参考,根据MSDN文档,boolean()返回以下内容: