对于条件检查,我们选择<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>
为什么没有定义<xsl:else>
标记?
当我使用<xsl:if>
时,如果有<xsl:else>
,我无需重复test="not($admin=$value1)
条件。
当您有多个案件需要检查时<xsl:choose>
是好的。当然,上面将模拟一个典型的' if-else ',但为什么这么多行代码
模拟 if-else 条件
我想知道为什么没有为XSL定义 <xsl:else>
标记?有什么想法吗?
答案 0 :(得分:6)
这样做需要父节点除了关于配对的逻辑之外还要执行条件逻辑 - 因为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>
此外,正如JLRishe所指出的,这种方法将远远不如支持任意数量的条件分支的xsl:choose
,因为每个“else if”分支将引入一个额外的嵌套级别(或两个)元件。
因此,当需要真正的“其他”时,只需使用xsl:choose
。
答案 1 :(得分:3)
因为<xsl:else>
元素,如果它存在,则必须附加到<xsl:if>
- 这会破坏XML创建概念之一:除非将元素分组在共同的父母,他们是独立的。换句话说,在以下结构中......
<xsl:if test="$admin=$value1">
<control>true</control>
</xsl:if>
<xsl:else>
<control>false</control>
</xsl:else>
......后者跟随前者(或者至少应该是)毫无意义:兄弟姐妹是独立的,test
元素的<xsl:if>
属性在任何情况下都不会被视为{{1} }}
现在,您可以说可以将<xsl:else>
和相关的<xsl:if>
放在同一个父级下。当然,这是真的 - 但是由此产生的结构可能(感谢@JLRishe提到的)仅次于<xsl:else>
,因为eash <xsl:choose>-<xsl:when>-<xsl:otherwise>
对需要更深的嵌套。
答案 2 :(得分:3)
没有<xsl:else>
,因为语言&#34; if-then-else&#34;只是&{34; if-elseif-elseif-elseif-else&#34;的<xsl:choose>
实现的一个子集。
请记住,XSLT最初是XSL-FO规范的第2章(实际上,它仍然是引用,而不是包含)。在使用XSL-FO时,有很多情况下&#34; if-then&#34;需要,而不是&#34; if-then-else&#34;。例如,考虑在文字结果元素中添加默认属性,然后覆盖它:
<fo:block font-size="10pt">
<xsl:if test="$needSmallFont">
<xsl:attribute name="font-size">8pt</xsl:attribute>
</xsl:if>
<xsl:apply-templates/>
</fo:block>
因为&#34; if-then-else&#34;已被<xsl:choose>
覆盖,此要求意味着必须创建一个等同于&#34; if-then&#34;的XSLT。这比选择单一时更紧。
这是规范中<xsl:if>
的首次出现,它回答了原始问题:
http://www.w3.org/TR/1998/WD-xsl-19980818#AEN1090
&#34; xsl:if指令提供简单的if-then条件;该 xsl:choose指令支持选择一个选项 几种可能性。&#34;