WebReference.com - Chapter 7 of XML for ASP.NET Developers, from Sams Publishing (3/13) | WebReference

WebReference.com - Chapter 7 of XML for ASP.NET Developers, from Sams Publishing (3/13)

To page 1To page 2current pageTo page 4To page 5To page 6To page 7To page 8To page 9To page 10To page 11To page 12To page 13
[previous] [next]

XML for ASP.NET Developers

Getting Your Feet Wet with XSLT

In this section we'll examine a simple XSLT document that transforms XML into HTML for display in a browser. The sections that follow show how XSLT can transform XML into many formats other than HTML. This example represents a common task that you will likely use when developing ASP.NET applications that require the presentation of XML data within a browser. Listing 7.1 shows an XML document that contains information about different golfers.

Listing 7.1 Golfers XML Document

 1: <?xml version="1.0" ?>
 2: <golfers>
 3:   <golfer skill="excellent" handicap="10" clubs="Taylor Made" id="1111">
 4:     <name>
 5:       <firstName>Heedy</firstName>
 6:       <lastName>Wahlin</lastName>
 7:     </name>
 8:     <favoriteCourses>
 9:       <course city="Pinetop" state="AZ" name="Pinetop Lakes CC"/>
10:       <course city="Phoenix" state="AZ" name="Ocotillo"/>
11:       <course city="Snowflake" state="AZ" name="Silver Creek"/>
12:     </favoriteCourses>
13:   </golfer>
14:   <golfer skill="moderate" handicap="12" clubs="Taylor Made" id="2222">
15:     <name>
16:       <firstName>Dan</firstName>
17:       <lastName>Wahlin</lastName>
18:     </name>
19:     <favoriteCourses>
20:       <course city="Pinetop" state="AZ" name="Pinetop Lakes CC"/>
21:       <course city="Pinetop" state="AZ" name="White Mountain CC"/>
22:       <course city="Springville" state="UT" name="Hobble Creek"/>
23:     </favoriteCourses>
24:   </golfer>
25: </golfers>

Listing 7.2 presents an XSLT document that can be used to transform the XML just shown into HTML. The different elements used in this document are discussed later.

Listing 7.2 Golfers XSLT Document

 1: <?xml version="1.0" ?>
 2: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 3:  version="1.0">
 4:   <xsl:output indent="yes" method="html"/>
 5:   <xsl:template match="/">
 6:     <html>
 7:       <head>
 8:         <style type="text/css">
 9:           .blackText {font-family:arial;color:#000000;}
10:           .largeYellowText {font-family:arial;font-size:18pt;
11:                    color:#ffff00;}
12:           .largeBlackText {font-family:arial;font-size:14pt;
13:                   color:#000000;}
14:           .borders {border-left:1px solid #000000;
15:                border-right:1px solid #000000;
16:                border-top:1px solid #000000;
17:                border-bottom:1px solid #000000;}
18:         </style>
19:       </head>
20:       <body bgcolor="#ffffff">
21:         <span class="largeBlackText"><b>Golfers: </b></span>
22:         <p/>
23:         <xsl:apply-templates/>
24:       </body>
25:     </html>
26:   </xsl:template>
27:   <xsl:template match="golfers">
28:     <xsl:apply-templates/>
29:   </xsl:template>
30:   <xsl:template match="golfer">
31:     <table class="borders" border="0" width="640" cellpadding="4"
32:      cellspacing="0" bgcolor="#efefef">
33:       <xsl:apply-templates select="name"/>
34:       <tr class="blackText">
35:         <td width="12%" align="left"><b>Skill: </b></td>
36:         <td width="12%" align="left">
37:           <xsl:value-of select="@skill"/>
38:         </td>
39:         <td width="12%" align="left"><b>Handicap: </b></td>
40:         <td width="12%" align="left">
41:           <xsl:value-of select="@handicap"/>
42:         </td>
43:         <td width="12%" align="left"><b>Clubs: </b></td>
44:         <td width="40%" align="left">
45:           <xsl:value-of select="@clubs"/>
46:         </td>
47:       </tr>  
48:       <tr>
49:         <td colspan="6">&#xa0;</td>
50:       </tr>
51:       <tr class="blackText">
52:         <td colspan="6" class="largeBlackText">
53:           Favorite Courses 
54:         </td>
55:       </tr>
56:       <tr>
57:         <td colspan="2"><b>City: </b></td>
58:         <td colspan="2"><b>State: </b></td>
59:         <td colspan="2"><b>Course: </b></td>
60:       </tr>
61:       <xsl:apply-templates select="favoriteCourses"/>
62:     </table>
63:     <p/>
64:   </xsl:template>
65:   <xsl:template match="name">
66:     <tr>
67:       <td colspan="6" class="largeYellowText" bgcolor="#02027a">
68:         <xsl:value-of select="firstName"/>&#xa0;
69:         <xsl:value-of select="lastName"/>
70:       </td>
71:     </tr>
72:   </xsl:template>
73:   <xsl:template match="favoriteCourses">
74:     <xsl:apply-templates/>
75:   </xsl:template>
76:   <xsl:template match="course">
77:     <tr class="blackText">
78:       <td colspan="2" align="left">
79:         <xsl:value-of select="@city"/>
80:       </td>
81:       <td colspan="2" align="left">
82:         <xsl:value-of select="@state"/>
83:       </td>
84:       <td colspan="2" align="left">
85:         <xsl:value-of select="@name"/>
86:       </td>
87:     </tr>
88:   </xsl:template>
89: </xsl:stylesheet>

To transform the XML document shown in Listing 7.1 using the XSLT document shown in Listing 7.2, the code shown in Listing 7.3 can be used:

Listing 7.3 Using the XslTransform Class

 1: <%@ Import Namespace="System.Xml" %>
 2: <%@ Import Namespace="System.Xml.Xsl" %>
 3: <%@ Import Namespace="System.Xml.XPath" %>
 4: <script language="C#" runat="server">
 5:   public void Page_Load(Object sender, EventArgs E) {		
 6:     string xmlPath = Server.MapPath("listing7.1.xml");
 7:     string xslPath = Server.MapPath("listing7.2.xsl"); 
 8:     
 9:     //Instantiate the XPathDocument Class
10:     XPathDocument doc = new XPathDocument(xmlPath);
11: 		
12:     //Instantiate the XslTransform Class
13:     XslTransform transform = new XslTransform();
14:     transform.Load(xslPath);
15: 		
16:     //Custom format the indenting of the output document
17:     //by using an XmlTextWriter
18:     XmlTextWriter writer = new XmlTextWriter(Response.Output);
19:     writer.Formatting = Formatting.Indented;
20:     writer.Indentation=4;
21:     transform.Transform(doc, null, writer);
22:   }
23: </script>

On executing the code in Listing 7.3, the XML document will magically be transformed into HTML that can be rendered in a browser. The result of this transformation is shown in Figure 7.2.

Figure 7.2: Transforming an XML document into HTML
Figure 7.2: Transforming an XML document into HTML

The code shown in Listings 7.2 and 7.3 may look quite foreign to you at this point. Don't let that worry you, though, because each portion of the code will be broken down to show how the different pieces work together. In addition to covering the XSLT language, the examples that follow also demonstrate XPath expressions as a point of review. For a detailed explanation of XPath, refer to Chapter 3, "XPath, XPointer, and XLink." Before examining the .NET classes involved in transforming XML to other structures, let's first examine what pieces are involved in constructing an XSLT document.


To page 1To page 2current pageTo page 4To page 5To page 6To page 7To page 8To page 9To page 10To page 11To page 12To page 13
[previous] [next]

© Copyright Pearson Education and Created: April 22, 2002
Revised: April 22, 2002

URL: http://webreference.com/authoring/languages/xml/aspnet/chap7/3.html