如何在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
相关产品推荐
相关产品推荐

