当预期的输出应该是什么时,这段代码给我输出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
设置布尔参数?
答案 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>
认为你的真假都不合适。