以下声明是否有效:
<xsl:with-param name="IsEnabled">
<xsl:value-of select="script:IsCustomerEnabled('abc') and script:IsBrandEnabled('xyz')"/>
</xsl:with-param>
当两者都返回Enabled时输出是什么?
此外,逗号(,)运算符将代替和:
<xsl:with-param name="IsEnabled">
<xsl:value-of select="script:IsCustomerEnabled('abc'), script:IsBrandEnabled('xyz')"/>
</xsl:with-param>
答案 0 :(得分:4)
如果两个调用都返回true,那么应用&#34;和&#34;的结果operator将是xs:boolean值true,其中xsl:value-of将显示为字符串&#34; true&#34;。
应用逗号运算符(需要XPath 2.0)的结果将是包含两个布尔值(true,true)的序列,其中xsl:value-of(在2.0中)将显示为&#34; true true&#34 ;
使用xsl:value-of作为变量绑定元素(如xsl:with-param)的子元素通常是不正确的,因为它具有构造包含单个文本节点的文档节点的效果,该节点包含转换为a的实际值串。没有理由进行所有转换:请使用xsl:with-param的select属性。
有时这只会导致效率低下,但有时会导致可怕的错误。例如,如果您使用
<xsl:variable name="option">
<xsl:value-of select="false()"/>
</xsl:variable>
<xsl:if test="$option">...
然后测试计算结果为true,因为$ option的值是一个节点,无论节点的内容如何,非空节点集的有效布尔值总是为真。