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

如何在XSLT文件的不同模板中分组change display条件

解决方案

1. 提取通用的Change Display条件模板

创建一个命名模板,统一封装$change-display = 'true'的判断逻辑,同时接收需要渲染的内容作为参数:

<xsl:template name="RenderChangeDisplay">
  <xsl:param name="content" select="''"/>
  <xsl:if test="$change-display = 'true'">
    <xsl:copy-of select="$content"/>
  </xsl:if>
</xsl:template>

2. 修改原有模板,调用通用模板

将每个原模板中独立的xsl:if test="$change-display = 'true'"代码块,替换为调用上述通用模板,并传递对应模块的专属内容作为参数:

<!-- 修改后的Questions模板 -->
<xsl:template name="Questions">
  <xsl:if test="$object-display = 'true'">
    <div class="{string($objectClass)}">
      <user id="1" name="ABC"/>
    </div>
  </xsl:if>
  <xsl:call-template name="RenderChangeDisplay">
    <xsl:with-param name="content">
      <div class="ChangeDisplay">
        <user id="2" name="EFG"/>
      </div>
    </xsl:with-param>
  </xsl:call-template>
</xsl:template>

<!-- 修改后的Answers模板 -->
<xsl:template name="Answers">
  <xsl:if test="$object-display = 'true'">
    <user id="3" name="HIJ"/>
  </xsl:if>
  <xsl:call-template name="RenderChangeDisplay">
    <xsl:with-param name="content">
      <user id="4" name="KLM"/>
    </xsl:with-param>
  </xsl:call-template>
</xsl:template>

<!-- 修改后的QuestionWithAnswers模板 -->
<xsl:template name="QuestionWithAnswers">
  <xsl:if test="$object-display = 'true'">
    <div class="{string($objectClass)}">
      <user id="5" name="NOP"/>
    </div>
  </xsl:if>
  <xsl:call-template name="RenderChangeDisplay">
    <xsl:with-param name="content">
      <div class="ChangeDisplay">
        <user id="6" name="QRS"/>
      </div>
    </xsl:with-param>
  </xsl:call-template>
</xsl:template>

核心优势

  • 避免重复编写相同的条件判断逻辑,减少冗余代码
  • 后续若需调整change-display的判断规则,仅需修改通用模板即可,无需逐个修改所有业务模板,提升维护效率
  • 业务模板只需专注自身专属内容,逻辑划分更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:52:48