El choose
permite poner a prueba a varias condiciones y se aplican únicamente cuando uno coincide (o un caso por defecto). Con if
puede probar también, pero se prueban de forma independiente y cada caja coincidente tendrá salida.
Adición de más detalles (lo siento tenían que salir corriendo)
choose
permite poner a prueba para múltiples casos y sólo generar la salida en el caso de que una de las condiciones del partido, o generar un poco de salida por defecto. por ejemplo:
<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>
Como se puede ver uno de las "ramas" habrá tomarse en función del valor de @foo
.
Con if
, que es una sola prueba y generar una salida en el resultado de la prueba:
<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>
La complicación aquí es el caso fracaso - lo que sucede cuando no es ni @foo
1,2 o 3? Este caso perdido es lo que se maneja cuidadosamente en el choose
, es decir, la capacidad de tener una acción predeterminada.
XSL también carece de la "cosa" que se encuentran en la mayoría de los otros idiomas, que le permite proporcionar una acción alternativa si falla la prueba if
- y una choose
con una sola when
y otherwise
le permite obtener alrededor de este, pero en el ejemplo anterior, que sería horrible (para demostrar por qué no podría hacer esto ..)
<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>
Necesita más explicación. –