xslt不能在`<xsl:choose>`</xsl:choose>中分配一个布尔值的param

时间:2011-06-09 08:24:21

标签: xml xslt exslt

当预期的输出应该是什么时,这段代码给我输出test

我的XSLT处理器或..是否有问题? :

    <xsl:template match="/">

         <xsl:param name="IsTextArea">
     <xsl:choose>
        <xsl:when test="false()">
           <xsl:value-of select="true()"/>
        </xsl:when>
        <xsl:otherwise>
           <xsl:value-of select="false()"/>
        </xsl:otherwise>
     </xsl:choose>
  </xsl:param>

  <html>

   <xsl:choose>
   <xsl:when test="$IsTextArea">test
   </xsl:when>
   </xsl:choose>


  </html>
    </xsl:template>

顺便说一下,我需要原始XSLT 1.0 的解决方案(没有扩展和类似的东西)。

是否可以在XSLT 1.0中为param设置布尔参数?

3 个答案:

答案 0 :(得分:3)

您的参数正在评估字符串。你应该使用:

    <html>
        <xsl:choose>
            <xsl:when test="$IsTextArea = 'true'">
                test
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$IsTextArea"/>
            </xsl:otherwise>
        </xsl:choose>
    </html>

答案 1 :(得分:2)

xsl:value-of指令将您提供的任何内容转换为字符串。所以true()变为“true”,而false()变为“false”。在布尔上下文中使用字符串时,任何非空字符串都将变为true(),而“”将变为false()。所以boolean-&gt; string-&gt;布尔转换不会往返。在XSLT 2.0中,答案是使用xsl:sequence而不是xsl:value-of;在1.0中,只需使用“是”和“否”之类的字符串以避免混淆。

答案 2 :(得分:0)

不应该是这样的:

<xsl:param name="IsTextArea">
 <xsl:choose>
    <xsl:when test="false()">
       <xsl:value-of select="false()"/>
    </xsl:when>
    <xsl:otherwise>
       <xsl:value-of select="true()"/>
    </xsl:otherwise>
 </xsl:choose>

认为你的真假都不合适。