xslt 无法在“”中为参数分配布尔值

发布于 2024-11-14 18:50:04 字数 768 浏览 4 评论 0原文

当预期的输出应该是什么都没有时,这段代码给了我输出 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 设置布尔参数?

this code is giving me the output test when the expected output should be nothing..

Is it something wrong with my XSLT processor or..? :

    <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>

Btw i need a solution for raw XSLT 1.0 (no extensions and stuff like that).

Is it possible to set a boolean parameter for a param in XSLT 1.0?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

若言繁花未落 2024-11-21 18:50:04

您的参数正在计算为字符串。你应该使用:

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

Your parameter is evaluating to a string. You should use:

    <html>
        <xsl:choose>
            <xsl:when test="$IsTextArea = 'true'">
                test
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$IsTextArea"/>
            </xsl:otherwise>
        </xsl:choose>
    </html>
眼泪淡了忧伤 2024-11-21 18:50:04

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

The xsl:value-of instruction converts whatever you give it to a string. So true() becomes "true", and false() becomes "false". When you use a string in a boolean context, any non-empty string becomes true(), while "" becomes false(). So boolean->string->boolean conversion doesn't round-trip. In XSLT 2.0 the answer is to use xsl:sequence instead of xsl:value-of; in 1.0, just use strings like "yes" and "no" to avoid confusion.

永不分离 2024-11-21 18:50:04

不应该是这样的吗:

<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>

都觉得你的真假格格不入。

Shouldn't it be like this:

<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>

Are think your true and false were out of place.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文