You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:XSL中无法基于XML布尔值通过if条件渲染按钮

问题分析与修复方案

核心问题

  1. 错误的取值逻辑:XSLT处理的是原始XML数据源,你不能在生成HTML节点后,立刻用XPath查询自己刚生成的<span>节点——此时该节点属于输出树,并非源XML的一部分,所以//span[@id='userGroup']/text()根本取不到任何值。
  2. 数据源值不匹配:你的Content.xml中<Datum>的内容是tr,但判断条件却和'true'做比较,即便取值逻辑正确,也无法触发预期的条件分支。

修复后的代码

修正后的Appearance.xsl

<?xml version="1.0"?>

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xsl:template match="/">
    <html>
    <body>
      <!-- 可选:保留用于显示的span -->
      <span id="userGroup"><xsl:value-of select="/Data/Datum[@ID='D02']"/></span>

      <!-- 直接从源XML获取值,跳过无效的中间节点查询 -->
      <xsl:variable name="userGroupValue" select="/Data/Datum[@ID='D02']/text()" />

      <!-- 用xsl:choose替代重复的xsl:if,逻辑更清晰 -->
      <xsl:choose>
        <!-- 注意:如果Content.xml中的值确实是'tr',请将此处的'true'改为'tr' -->
        <xsl:when test="$userGroupValue = 'true'">
          <button id="myButton" style="background-color: #4CAF50; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer;">Click Me</button>
        </xsl:when>
        <xsl:otherwise>
          <button id="myButton" style="background-color: #ccc; border: none; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: not-allowed;">Click Me</button>
        </xsl:otherwise>
      </xsl:choose>
    </body>
    </html>
  </xsl:template>

</xsl:stylesheet>

可选:修正Content.xml的数据源

如果tr是拼写错误,建议将Content.xml中的<Datum>值改为标准布尔值:

<?xml version="1.0" encoding="UTF-8"?>
<Data>
  <Datum ID="D02" Type="Boolean" Name="userGroup">true</Datum>
</Data>

补充说明

  • 始终直接从原始XML数据源提取需要的值,不要试图查询XSLT正在生成的输出节点。
  • 使用<xsl:choose>替代两个互斥的<xsl:if>,可以避免冗余代码,同时确保只会触发一个分支。

内容的提问来源于stack exchange,提问作者akash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 06:23:14