What is the difference between two given below codes? Both codes checks whether an attribute exists in a tag or not:
<xsl:choose>
<xsl:when test="string-length(DBE:Attribute[@name='s0SelectedSite']/node()) > 0">
<table>
...
</table>
</xsl:when>
<xsl:otherwise>
<table>
...
</table>
</xsl:otherwise>
</xsl:choose>
and
<xsl:if test="@Col1-AllocValue">
<xsl:copy-of select="@Col1-AllocValue"/>
</xsl:if>
Structure of choose is
<xsl:choose>
<xsl:when test="a">A</xsl:when>
<xsl:when test="b">B</xsl:when>
<xsl:when test="c">C</xsl:when>
<xsl:when test="...">...</xsl:when>
<xsl:otherwise>Z</xsl:otherwise>
</xsl:choose>
which allows multiple checks and one operation to be performed for the first test evaluating to true
. xsl:otherwise
is for performing default actions when none of the checks evaluates to true
; in particular this facilitates an if-then-else construction (just one xsl:when
alternative plus an xsl:otherwise
block).
It always astounded me that xsl:if
did not allow for an xsl:else
alternative, but as this is available in xsl:choose
construct, I guess it was judged not to add it. Maybe the next XSLT version will incorporate an xsl:else
?
For the rest, the tests in xsl:when
and in xsl:if
do exactly the same thing: check the condition.
Note that the structure of xsl:if
is simply
<xsl:if test="a">A</xsl:if>
A single
<xsl:when test="a">A</xsl:when>
would be invalid: xsl:when
element is always a child of xsl:choose
. And xsl:choose
may have children xsl:when
and xsl:otherwise
only.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With