1

所以我认为这相当简单,但它可能比我理解的更复杂。

无论如何,目前我只会包含我认为相关的代码,如果有人认为更多相关的代码,那么我会尝试包含更多。

我有两个说法:

<xsl:value-of select="$isOnlineColumnEmpty" />
<xsl:value-of select="not($isOnlineColumnEmpty = 'false')" />

第一个输出假。但是,第二个输出的是 true,这与我的预期相反。

除此之外,这两个语句重复多次,我只在一个部分中得到这个结果。但是,这两个语句之间绝对没有代码,所以没有什么可以改变变量的值。

只是想知道是否有什么我可以忽略的?

4

2 回答 2

1

而不是

<xsl:value-of select="not($isOnlineColumnEmpty = 'false')" />

使用

<xsl:value-of select="not($isOnlineColumnEmpty = false())" />

说明

布尔值字符串false()不同。 "false"

当一个布尔值与另一个值进行比较时,第二个值被转换为一个布尔值,然后进行比较。引用XPath 1.0 W3C 规范

如果至少一个要比较的对象是布尔值,那么每个要比较的对象都被转换为布尔值,就像通过应用布尔函数一样。”

因此,在这种具体情况下,字符串"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()
于 2012-07-19T03:13:15.113 回答
0

所以,我后来想通了。

将语句更改为:

<xsl:value-of select="$isOnlineColumnEmpty != false" />

为我解决了这个问题。

于 2012-07-18T22:54:33.067 回答