允许您测试多个条件并仅在choose
一个匹配(或默认情况)时应用。if
你也可以测试,但它们是独立测试的,每个匹配的案例都会有输出。
添加更多细节(抱歉不得不匆忙离开)
choose
允许您测试多种情况,并且仅在其中一个条件匹配的情况下生成输出,或者生成一些默认输出。例如:
<xsl:choose>
<xsl:when test='@foo=1'><!-- do something when @foo is 1--></xsl:when>
<xsl:when test='@foo=2'><!-- do something when @foo is 2--></xsl:when>
<xsl:when test='@foo=3'><!-- do something when @foo is 3--></xsl:when>
<xsl:otherwise><!-- this is the default case, when @foo is neither 1, 2 or 3--></xsl:otherwise>
</xsl:choose>
如您所见,将根据 的值采用“分支”之一。@foo
使用if
,它是一个单一的测试,并在该测试的结果上生成输出:
<xsl:if test='@foo=1'><!-- do this if @foo is 1--></xsl:if>
<xsl:if test='@foo=2'><!-- do this if @foo is 2--></xsl:if>
<xsl:if test='@foo=3'><!-- do this if @foo is 3--></xsl:if>
这里的复杂情况是失败案例- 当@foo
既不是 1,2 也不是 3 时会发生什么?这种丢失的情况是由choose
- 即具有默认操作的能力巧妙地处理的。
XSL 还缺少您在大多数其他语言中找到的“else”,它允许您在if
测试失败时提供替代操作 - 以及choose
一个单一的when
并otherwise
允许您解决这个问题,但在我上面的示例中,那将是可怕的(证明你为什么不这样做..)
<xsl:choose>
<xsl:when test='@foo=1'><!-- do something when @foo is 1--></xsl:when>
<xsl:otherwise> <!-- else -->
<xsl:choose>
<xsl:when test='@foo=2'><!-- do something when @foo is 2--></xsl:when>
<xsl:otherwise> <!-- else -->
<xsl:choose>
<xsl:when test='@foo=2'><!-- do something when @foo is 2--></xsl:when>
<xsl:otherwise><!-- this is the case, when @foo is neither 1, 2 or 3--></xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>