For the development community, one of the most useful
features when working with XML is the ability to transform XML content to
another format more appropriate for a given situation. To harness this power in
ASP.NET, we first of all need to understand when and why we should use
transformations in a web application. Once we've made that decision, we must
understand the syntax necessary to create our transformation and how to execute
the transformation in the managed environment of .NET.
By the end of this chapter, we will have covered the
What is XSLT?
Structure of an XSLT document
Applying XSLT Style Sheets to XML documents
Controlling document output
Using transformations for the presentation layer
Using transformations for B2B
We will learn how to harness the XPath skills acquired from
the previous chapter, and examine how to use transformations effectively in
Extensible Stylesheet Language Transformations (XSLT) is a
declarative programming language, with its origins in the early Extensible
Stylesheet Language (XSL). XSLT v1.0 was endorsed by the Director of W3C as a
Recommendation in November 1999, and more information can be found at http://www.w3.org/TR/xslt. We will be
using version 1.0 in this chapter, as supported by the .NET Framework, although
there are other versions in working draft at the time of writing.
XSLT is the language which instructs an XSLT processor how
to convert information in an XML source document to a format of our preference
– be it an XML document (including WML for example), an HTML document, or just
plain text. Note that different XSLT engines will adhere to the standard to
differing levels, but in this chapter, we will naturally concentrate on the
behavior of .NET.
XML to XML
There are many situations where there is a need to transform
an XML document to one in a completely different XML dialect. For example,
consider the following document extract:
We may prefer to have this information in a different form,
perhaps for a component we have already developed which handles data in this
Notice how the first extract is element-centric; it is
devoid of any attributes. Also the first uses a different nomenclature for node
names, like <QTY> vs. <quantity>,
and we can't forget that XML documents are case-sensitive – thus <Description> is different from <description>.
So how can we transform one to the other? We could load the
first XML document into an XmlDocument object, traverse each node and
programmatically generate a second XmlDocument object. This would work, but
what if we needed to make changes to the transformation? It could be quite a
challenge to locate and change the code to create the new transformation. Also,
the programmatic route requires recompiling the code after any such changes.
The preferred method would be to use XSLT style sheets.
After all, the language is designed specifically for this purpose. Secondly, it
is fairly easy to locate the template rules that perform certain aspects of a
transformation (discussed later) and add, update, or delete parts to create new
transformations. Finally, it is not necessary to recompile and redeploy the
code which references an XSLT style sheet that has been changed.
XML to HTML
In ASP.NET applications, it is quite common to encounter a
need to present data provided as XML to the user in HTML. A typical example of
this would be a symmetrical XML document that quite easily lends itself to a
table format. For instance, we may be interested in taking the following XML
and presenting it to the user like this:
The markup to create the table above would be enclosed
within an HTML <table> tag. By using
XSLT, we can take any XML structure and convert it to HTML. We will see how to
do this a little later.
XML to Plain Text
From time to time, we may need to generate plain text.
Typically, this is done to support legacy applications that consume text
documents with either fixed length or comma delimited columns. Thus the
<items> element and all of its children from the previous XML file could
be transformed to a comma delimited text file like this:
ITM-1001, 1, 1, 123.45, Gadget ZYZ
ITM-1002, 1, 3, 4.00,
ITM-1003, 2, 1, 15.00, Gizmo Part
ITM-1004, 3, 1, 44.00, Widget X
Next Page >>>