所以我觉得这很简单,但是我可以理解它更多。
无论如何,目前我只会包含我认为相关的代码,如果有人认为更多相关内容,那么我会尝试包含更多代码。
我有两个陈述:
<xsl:value-of select="$isOnlineColumnEmpty" />
<xsl:value-of select="not($isOnlineColumnEmpty = 'false')" />
第一个输出错误。但是,第二个输出为真,这与我的期望相反。
除此之外,这两个语句多次重复,我只在一个部分得到这个结果。但是,这两个语句之间绝对没有代码,所以没有什么可以改变变量的值。
只是想知道是否有什么我可以忽略的东西?
答案 0 :(得分:1)
而不是:
<xsl:value-of select="not($isOnlineColumnEmpty = 'false')" />
使用强>:
<xsl:value-of select="not($isOnlineColumnEmpty = false())" />
<强>解释强>:
布尔值 false()
与字符串 "false"
不同。
当布尔值与另一个值进行比较时,第二个值将转换为布尔值,然后执行比较。引用 XPath 1.0 W3C Specification :
“如果要比较的对象中至少有一个是布尔值,那么每个对象 要比较的转换为布尔值,就像应用布尔值一样 功能“。
因此,在这个具体的例子中,字符串"false"
被转换为布尔值。根据定义,boolean($someString)
对于任何非空字符串都是true()
。
因此,转换后,将比较两个布尔值false()
和true()
,结果为false()
。因为在原始表达式中,此结果是not()
函数的参数,最终结果为not(false())
,即true()
。
以下是计算链:
not($isOnlineColumnEmpty = 'false') ==> not(false() = 'false') ==>
not(false() = boolean(false())) ==> not(false() = true()) ==>
not(false()) ==> true()
答案 1 :(得分:0)
所以,我稍后想出来了。
将语句更改为:
<xsl:value-of select="$isOnlineColumnEmpty != false" />
为我解决了这个问题。