Working with Both xsl:if and xsl:choose in XSLT - Nesting xsl:if within xsl:choose
(Page 4 of 6 )
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 whose salary would otherwise be shown in red.
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:choose>
<xsl:when test="text() > '2500' and text() < '4000'">
<xsl:if test="./following::Deptno[1]/text() = '10'">
<td>
NA
</td>
</xsl:if>
<xsl:if test="./following::Deptno[1]/text() != '10'">
<td style="color: red">
<xsl:value-of select="."/>
</td>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:value-of select="."/>
</td>
</xsl:otherwise>
</xsl:choose>
</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>4400</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:choose within another >>
More ASP.NET Articles
More By Jagadish Chaterjee