Dealing with Attributes and Elements in XPath with XSLT using ASP.NET 2.0 - Retrieving values of attributes and elements simultaneously
(Page 4 of 6 )
Now that we understand how to retrieve the values of both elements and attributes, it is time to retrieve all the values and display (transform) them in a meaningful manner.
I would like to display all the details for employees by department. The following is the first approach we can use to accomplish this task (using separate template):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select ="EmployeeDetails/Department"/>
</xsl:template>
<xsl:template match="EmployeeDetails/Department">
<b>Department: <xsl:value-of select ="@Dname"/></b><hr />
<xsl:apply-templates select ="Employee"/>
<br/>
</xsl:template>
<xsl:template match ="Employee" >
<xsl:value-of select ="Empno"/>,
<xsl:value-of select ="Ename"/>,
<xsl:value-of select ="Sal"/><br />
</xsl:template>
</xsl:stylesheet>
From the above, you can understand that I am using two separate templates to transform in a meaningful manner. The first template deals with the “Department.” In this template, I am trying to retrieve the value of the attribute “Dname.” The second template deals with the “Employee.” This deals with all the elements available under “Employee.” The following is the second approach we can use to accomplish the same task (using a nested “xsl:for-each” construct).
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="EmployeeDetails/Department">
<b>
Department: <xsl:value-of select ="@Dname"/>
</b>
<hr />
<xsl:for-each select="Employee">
<xsl:value-of select ="Empno"/>,
<xsl:value-of select ="Ename"/>,
<xsl:value-of select ="Sal"/><br />
</xsl:for-each>
<br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
In any of the above cases, when the XSLT gets executed, the transformation looks something like the following:
<b>Department: Accounting</b><hr />
1001, Jagadish, 3400<br />
1002, Chatarji, 2500<br />
1003, Winner, 4300<br />
<br />
<b>Department: Sales</b><hr />
2001, Dhanam, 4500<br />
2002, Chinna, 3400<br />
2003, Pedda, 3200<br />
<br />
<b>Department: Research</b><hr />
3001, Ram, 5600<br />
3002, Robert, 5600<br />
3003, Rahim, 4300<br />
<br />
Next: Displaying an HTML table based on the hierarchy >>
More ASP.NET Articles
More By Jagadish Chaterjee