对于条件检查我们要么去<xsl:choose>或<xsl:if>
<xsl:choose>
<xsl:when test="expression">
... some output ...
</xsl:when>
<xsl:otherwise>
... some output ....
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$admin=$value1">
<control>true</control>
</xsl:if>
<xsl:if test="not($admin=$value1)">
<control>false</control>
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
为什么没有<xsl:else>定义标签?
当我使用时<xsl:if>,如果有<xsl:else>,我不需要重复这个test="not($admin=$value1)条件.
<xsl:choose>当你有多个案件要检查时,这是好事.当然上面会模拟一个典型的' if-else ',但为什么这么多代码行来模拟if-else条件
我想知道为什么没有<xsl:else>为XSL定义标签?有什么想法吗?
这样做需要父节点除了关于配对的逻辑之外还执行条件逻辑 - 因为节点xsl:if和xsl:else节点都是独立的兄弟节点.其他基于树的控制语法结构(如Knockout)也存在同样的"问题".
虽然xsl:if可以假设支持以下以避免前一个问题(节点是兄弟姐妹的问题),但这样做也使得在琐碎的情况下使用起来更加困难.
<xsl:if test="$admin=$value1">
<xsl:then-hypothetical>
<control>true</control>
</xsl:then-hypothetical>
<xsl:else-hypothetical>
..
</xsl:else-hypothetical>
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
此外,正如JLRishe指出的那样,这种方法将大大低于xsl:choose支持任意数量的条件分支,因为每个"else if"分支将引入另外一级(或两个)嵌套元素.
因此,当需要真正的"其他"时,只需使用即可xsl:choose.