[2.0] Conditional Expressions—if, then, and else
One of the less elegant features of XSLT is its
if-then-else logic. If I want to test one condition (a simple if), I use <xsl:if>. If I want to change that to
test more than one condition or add an else case, I have to use <xsl:choose>, <xsl:when>, and <xsl:otherwise>.
(We cover those elements in Chapter 5.) XPath 2.0
gives us the extremely useful if
operator. We can now do if-then-else logic inside the XPath expression
itself.
For comparison, here’s how we do things in XSLT 1.0:
<?xml version="1.0"?>
<!-- if-1_0.xsl -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="x" select="'10'"/>
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:text>
An example of if-then-else logic in XSLT 1.0:</xsl:text>
<xsl:text>

 If $x is larger than 10, print 'Big', </xsl:text>
<xsl:text>
 otherwise print 'Little'</xsl:text>
<xsl:text>

 </xsl:text>
<xsl:choose>
<xsl:when test="$x > 10">
<xsl:text>Big</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>Little</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>We look at the value of $x
and write Big if it’s larger than
10; otherwise, we write Little.
Pretty simple stuff, but the <xsl:choose> element takes up 8 lines here. To do the same thing in XSLT
2.0, it’s much simpler:
<?xml version="1.0"?>
<!-- if-2_0.xsl --> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access