Working with Both xsl:if and xsl:choose in XSLT - Nesting xsl:choose within xsl:if
(Page 3 of 6 )
As you are familiar with both "xsl:if" and "xsl:choose" by now, let us nest them together. If you are new to "xsl:choose," I suggest you go through my second article in this series.
Let us modify our business need in such a way that I would like to have all the employee details listed with:
- salary in red, if earnings are more than 2500 and less than 4000
- salary must not be shown for the employees working in department 10
The entire XSLT code for the above business need is as follows:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1">
<xsl:apply-templates select="SQLData/Rows" />
</table>
</xsl:template>
<xsl:template match="SQLData/Rows">
<tr>
<td>
<xsl:value-of select="Empno"/>
</td>
<td>
<xsl:value-of select="Ename"/>
</td>
<xsl:apply-templates select="Sal" />
<td>
<xsl:value-of select="Deptno"/>
</td>
</tr>
</xsl:template>
<xsl:template match="Sal">
<xsl:if test="./following::Deptno[1]/text() != '10'">
<xsl:choose>
<xsl:when test="text() > '2500' and text() < '4000'">
<td style="color: red">
<xsl:value-of select="."/>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:value-of select="."/>
</td>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="./following::Deptno[1]/text() = '10'">
<td>
NA
</td>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
When the above code gets executed, you are likely to get the following transformation:
<table border="1">
<tr>
<td>1001</td>
<td>Jag</td>
<td>
NA
</td>
<td>10</td>
</tr>
<tr>
<td>1002</td>
<td>Chat</td>
<td style="color: red">2800</td>
<td>20</td>
</tr>
<tr>
<td>1003</td>
<td>Winner</td>
<td>
NA
</td>
<td>10</td>
</tr>
<tr>
<td>1004</td>
<td>Dhan</td>
<td>5000</td>
<td>20</td>
</tr>
</table>
Next: Nesting xsl:if within xsl:choose >>
More ASP.NET Articles
More By Jagadish Chaterjee