Você está na página 1de 45

1 XSL Languages.......................................................................................................................................

3
It Started with XSL......................................................................................................................................3
1.1 CSS = HTML Style Sheets............................................................................................................3
1.2 XSL = XML Style Sheets..............................................................................................................4
1.3 XSL - More Than a Style Sheet Language...................................................................................4
1.4 This Tutorial is About XSLT........................................................................................................4
2 Introduction to XSLT..............................................................................................................................4
2.1 What You Should Already Know.................................................................................................4
2.2 What is XSLT?..............................................................................................................................5
2.3 XSLT = XSL Transformations......................................................................................................5
2.4 XSLT Uses XPath.........................................................................................................................5
2.5 How Does it Work?.......................................................................................................................5
2.6 XSLT is a Web Standard...............................................................................................................5
3 XSLT Browsers......................................................................................................................................6
3.1 Firefox 1.0.2..................................................................................................................................6
3.2 Mozilla 1.7.8.................................................................................................................................6
3.3 Netscape 8.....................................................................................................................................6
3.4 Opera 8..........................................................................................................................................6
3.5 Internet Explorer 6........................................................................................................................6
3.6 Internet Explorer 5........................................................................................................................6
3.7 Internet Explorer MSXML Parser.................................................................................................6
4 XSLT – Transformation..........................................................................................................................7
4.1 Correct Style Sheet Declaration....................................................................................................7
4.2 Start with a Raw XML Document.................................................................................................7
4.3 Create an XSL Style Sheet..........................................................................................................11
4.4 Link the XSL Style Sheet to the XML Document......................................................................12
4.5 My CD Collection.......................................................................................................................12
5 XSLT – Templates................................................................................................................................13
5.1 The <xsl:template> Element.......................................................................................................13
5.2 My CD Collection.......................................................................................................................14
6 XSLT - The <xsl:value-of> Element....................................................................................................14
6.1 The <xsl:value-of> Element........................................................................................................15
6.2 My CD Collection.......................................................................................................................15
7 XSLT - The <xsl:for-each> Element....................................................................................................15
7.1 The <xsl:for-each> Element........................................................................................................16
7.2 My CD Collection.......................................................................................................................16
7.3 Filtering the Output.....................................................................................................................17
7.4 My CD Collection.......................................................................................................................18
8 XSLT - The <xsl:sort> Element...........................................................................................................18
8.1 Where to put the Sort Information..............................................................................................18
8.2 My CD Collection.......................................................................................................................19
9 XSLT - The <xsl:if> Element...............................................................................................................19
9.1 The <xsl:if> Element...................................................................................................................19
9.1.1 Syntax................................................................................................................................20
9.2 Where to Put the <xsl:if> Element..............................................................................................20
9.3 My CD Collection.......................................................................................................................20
10 XSLT - The <xsl:choose> Element.................................................................................................21
10.1 The <xsl:choose> Element..........................................................................................................21
10.1.1 Syntax................................................................................................................................21
10.2 Where to put the Choose Condition............................................................................................21
10.3 My CD Collection.......................................................................................................................22
10.4 Another Example.........................................................................................................................23
10.5 My CD Collection.......................................................................................................................23
11 XSLT - The <xsl:apply-templates> Element...................................................................................24
11.1 The <xsl:apply-templates> Element............................................................................................24
11.2 My CD Collection.......................................................................................................................25

1
12 XSLT - On the Client.......................................................................................................................25
12.1 A JavaScript Solution..................................................................................................................25
12.2 The XML File and the XSL File.................................................................................................26
12.3 Transforming XML to XHTML in the Browser.........................................................................27
13 XSLT - On the Server......................................................................................................................28
13.1 A Cross Browser Solution...........................................................................................................28
13.2 The XML File and the XSLT File...............................................................................................28
13.3 Transforming XML to XHTML on the Server...........................................................................29
14 XSLT - Editing XML.......................................................................................................................29
14.1 Open, Edit and Save XML..........................................................................................................30
14.2 The XML File and the XSL File.................................................................................................30
14.3 The ASP File...............................................................................................................................31
15 XML Editors....................................................................................................................................33
15.1 XML is Text-based......................................................................................................................33
15.2 Why Not Notepad?......................................................................................................................33
15.3 Why an XML Editor?..................................................................................................................33
15.4 XML Editors...............................................................................................................................34
15.5 Altova's XMLSPY.......................................................................................................................34
16 XSLT Elements Reference...............................................................................................................34
16.1 XSLT Elements...........................................................................................................................34
17 XSLT Functions...............................................................................................................................36
17.1 XSLT Functions..........................................................................................................................36
18 The current() Function.....................................................................................................................36
18.1 Definition and Usage...................................................................................................................36
18.2 Syntax..........................................................................................................................................37
18.2.1 Example 1.....................................................................................................................37
19 The document() Function.................................................................................................................37
19.1 Definition and Usage...................................................................................................................37
19.2 Syntax..........................................................................................................................................38
19.3 Parameters...................................................................................................................................38
20 The element-available() Function....................................................................................................38
20.1 Definition and Usage...................................................................................................................38
20.2 Syntax..........................................................................................................................................38
20.3 Parameters...................................................................................................................................39
20.3.1 Example 1.....................................................................................................................39
21 The format-number() Function........................................................................................................39
21.1 Definition and Usage...................................................................................................................39
21.2 Syntax..........................................................................................................................................39
21.3 Parameters...................................................................................................................................39
21.3.1 Example 1.....................................................................................................................40
22 The function-available() Function....................................................................................................40
22.1 Definition and Usage...................................................................................................................40
22.2 Syntax..........................................................................................................................................41
22.3 Parameters...................................................................................................................................41
22.3.1 Example 1.....................................................................................................................41
23 The generate-id() Function...............................................................................................................41
23.1 Definition and Usage...................................................................................................................41
23.2 Syntax..........................................................................................................................................41
23.3 Parameters...................................................................................................................................42
23.3.1 Example 1.....................................................................................................................42
24 The key() Function...........................................................................................................................42
24.1 Definition and Usage...................................................................................................................42
24.2 Syntax..........................................................................................................................................42
24.3 Parameters...................................................................................................................................42
24.3.1 Example 1.....................................................................................................................43

2
25 The system-property() Function.......................................................................................................43
25.1 Definition and Usage...................................................................................................................43
25.2 Syntax..........................................................................................................................................43
25.3 Parameters...................................................................................................................................43
25.3.1 Example 1.....................................................................................................................44
26 Version: 1 Vendor: Microsoft Vendor URL: http://www.microsoft.com.......................................44
27 The unparsed-entity-uri() Function..................................................................................................44
27.1 Definition and Usage...................................................................................................................44
27.2 Syntax..........................................................................................................................................44
27.3 Parameters...................................................................................................................................44

1 XSL Languages
It started with XSL and ended up with XSLT, XPath, and XSL-FO.

It Started with XSL

XSL stands for EXtensible Stylesheet Language.

The World Wide Web Consortium (W3C) started to develop XSL because there was a need for an
XML-based Stylesheet Language.

1.1 CSS = HTML Style Sheets

HTML uses predefined tags and the meaning of the tags are well understood.

The <table> element in HTML defines a table - and a browser knows how to display it.

Adding styles to HTML elements is simple. Telling a browser to display an element in a special font
or color, is easy with CSS. 

1.2 XSL = XML Style Sheets

XML does not use predefined tags (we can use any tag-names we like), and the meaning of these
tags are not well understood.

A <table> element could mean an HTML table, a piece of furniture, or something else - and a
browser does not know how to display it.

XSL describes how the XML document should be displayed!

1.3 XSL - More Than a Style Sheet Language

XSL consists of three parts:

3
 XSLT - a language for transforming XML documents
 XPath - a language for navigating in XML documents
 XSL-FO - a language for formatting XML documents

1.4 This Tutorial is About XSLT

The rest of this tutorial is about XSLT - the language for transforming XML documents.

But you can also study our XPath Tutorial and our XSL-FO Tutorial.

2 Introduction to XSLT

XSLT is a language for transforming XML documents into XHTML documents or to other
XML documents.

XPath is a language for navigating in XML documents.

2.1 What You Should Already Know

Before you continue you should have a basic understanding of the following:

 HTML / XHTML
 XML / XML Namespaces
 XPath

If you want to study these subjects first, find the tutorials on our Home page.

2.2 What is XSLT?


 XSLT stands for XSL Transformations
 XSLT is the most important part of XSL
 XSLT transforms an XML document into another XML document
 XSLT uses XPath to navigate in XML documents
 XSLT is a W3C Recommendation

2.3 XSLT = XSL Transformations

XSLT is the most important part of XSL.

XSLT is used to transform an XML document into another XML document, or another type of
document that is recognized by a browser, like HTML and XHTML. Normally XSLT does this by
transforming each XML element into an (X)HTML element.

4
With XSLT you can add/remove elements and attributes to or from the output file. You can also
rearrange and sort elements, perform tests and make decisions about which elements to hide and
display, and a lot more.

A common way to describe the transformation process is to say that XSLT transforms an XML
source-tree into an XML result-tree.

2.4 XSLT Uses XPath

XSLT uses XPath to find information in an XML document. XPath is used to navigate through
elements and attributes in XML documents.

If you want to study XPath first, please read our XPath Tutorial.

2.5 How Does it Work?

In the transformation process, XSLT uses XPath to define parts of the source document that should
match one or more predefined templates. When a match is found, XSLT will transform the matching
part of the source document into the result document.

2.6 XSLT is a Web Standard

XSLT became a W3C Recommendation 16. November 1999.

To read more about the XSLT activities at W3C, please read our W3C Tutorial.

3 XSLT Browsers
Not all Internet browsers have full support for XML and XSLT.

3.1 Firefox 1.0.2

This web browser has support for XML and XSLT (and CSS).

3.2 Mozilla 1.7.8

Mozilla includes Expat for XML parsing and has support to display XML + CSS. Mozilla also has some
support for Namespaces.

Mozilla is available with an XSLT implementation.

5
3.3 Netscape 8

Netscape 8 is based on the Mozilla engine. Same XML / XSLT support as Mozilla.

3.4 Opera 8

This web browser supports XML + CSS.

3.5 Internet Explorer 6

Microsoft's web browser has full XML support, including Namespaces, Style sheets in CSS, and XSLT
1.0.

The XML Parser 3.0 in Internet Explorer 6.0 and Windows XP is based on both the W3C XSLT 1.0
and the W3C XPath 1.0 Recommendations.

If you are serious about learning XSLT you should upgrade to Internet Explorer 6.0.

3.6 Internet Explorer 5

XSLT in Internet Explorer 5 is NOT compatible with the official W3C XSL Recommendation.

3.7 Internet Explorer MSXML Parser

MSXML Parser 2.5 is the XML parser that is shipped with Windows 2000 and IE 5.5.

MSXML Parser 3.0 is the XML parser that is shipped with IE 6.0 and Windows XP.

According to Microsoft, the MSXML Parser 3.0 is 100% compatible with the official W3C XSLT
Recommendation.

4 XSLT – Transformation

Example study: How to transform XML into XHTML using XSLT.

The details of this example will be explained in the next chapter. 

4.1 Correct Style Sheet Declaration

The root element that declares the document to be an XSL style sheet is <xsl:stylesheet> or
<xsl:transform>.

Note: <xsl:stylesheet> and <xsl:transform> are completely synonymous and either can be used!

6
The correct way to declare an XSL style sheet according to the W3C
XSLT Recommendation is:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

or:

<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

To get access to the XSLT elements, attributes and features we must declare the XSLT namespace
at the top of the document.

The xmlns:xsl="http://www.w3.org/1999/XSL/Transform" points to the official W3C XSLT


namespace. If you use this namespace, you must also include the attribute version="1.0".

4.2 Start with a Raw XML Document

We want to transform the following XML document ("cdcatalog.xml") into


XHTML:

<?xml version="1.0" encoding="ISO-8859-1"?>


<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
.
</catalog>

Viewing XML Files in Firefox and Internet Explorer: Open the XML file (typically by clicking on
a link) - The XML document will be displayed with color-coded root and child elements. A plus (+) or
minus sign (-) to the left of the elements can be clicked to expand or collapse the element
structure. To view the raw XML source (without the + and - signs), select "View Page Source" or
"View Source" from the browser menu.

Viewing XML Files in Netscape 6: Open the XML file, then right-click in XML file and select "View
Page Source". The XML document will then be displayed with color-coded root and child elements.

Viewing XML Files in Opera 7: Open the XML file, then right-click in XML file and select "Frame" /
"View Source". The XML document will be displayed as plain text.

View "cdcatalog.xml"

7
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <!--
Edited with XML Spy v4.2
  -->
- <catalog>
- <cd>
  <title>Empire Burlesque</title>
  <artist>Bob Dylan</artist>
  <country>USA</country>
  <company>Columbia</company>
  <price>10.90</price>
  <year>1985</year>
  </cd>
- <cd>
  <title>Hide your heart</title>
  <artist>Bonnie Tyler</artist>
  <country>UK</country>
  <company>CBS Records</company>
  <price>9.90</price>
  <year>1988</year>
  </cd>
- <cd>
  <title>Greatest Hits</title>
  <artist>Dolly Parton</artist>
  <country>USA</country>
  <company>RCA</company>
  <price>9.90</price>
  <year>1982</year>
  </cd>
- <cd>
  <title>Still got the blues</title>
  <artist>Gary Moore</artist>
  <country>UK</country>
  <company>Virgin records</company>
  <price>10.20</price>
  <year>1990</year>
  </cd>
- <cd>
  <title>Eros</title>
  <artist>Eros Ramazzotti</artist>
  <country>EU</country>
  <company>BMG</company>
  <price>9.90</price>
  <year>1997</year>
  </cd>
- <cd>
  <title>One night only</title>
  <artist>Bee Gees</artist>
  <country>UK</country>
  <company>Polydor</company>
  <price>10.90</price>
  <year>1998</year>
  </cd>
- <cd>
  <title>Sylvias Mother</title>
  <artist>Dr.Hook</artist>
  <country>UK</country>
  <company>CBS</company>
  <price>8.10</price>
  <year>1973</year>
  </cd>

8
- <cd>
  <title>Maggie May</title>
  <artist>Rod Stewart</artist>
  <country>UK</country>
  <company>Pickwick</company>
  <price>8.50</price>
  <year>1990</year>
  </cd>
- <cd>
  <title>Romanza</title>
  <artist>Andrea Bocelli</artist>
  <country>EU</country>
  <company>Polydor</company>
  <price>10.80</price>
  <year>1996</year>
  </cd>
- <cd>
  <title>When a man loves a woman</title>
  <artist>Percy Sledge</artist>
  <country>USA</country>
  <company>Atlantic</company>
  <price>8.70</price>
  <year>1987</year>
  </cd>
- <cd>
  <title>Black angel</title>
  <artist>Savage Rose</artist>
  <country>EU</country>
  <company>Mega</company>
  <price>10.90</price>
  <year>1995</year>
  </cd>
- <cd>
  <title>1999 Grammy Nominees</title>
  <artist>Many</artist>
  <country>USA</country>
  <company>Grammy</company>
  <price>10.20</price>
  <year>1999</year>
  </cd>
- <cd>
  <title>For the good times</title>
  <artist>Kenny Rogers</artist>
  <country>UK</country>
  <company>Mucik Master</company>
  <price>8.70</price>
  <year>1995</year>
  </cd>
- <cd>
  <title>Big Willie style</title>
  <artist>Will Smith</artist>
  <country>USA</country>
  <company>Columbia</company>
  <price>9.90</price>
  <year>1997</year>
  </cd>
- <cd>
  <title>Tupelo Honey</title>
  <artist>Van Morrison</artist>
  <country>UK</country>
  <company>Polydor</company>
  <price>8.20</price>

9
  <year>1971</year>
  </cd>
- <cd>
  <title>Soulsville</title>
  <artist>Jorn Hoel</artist>
  <country>Norway</country>
  <company>WEA</company>
  <price>7.90</price>
  <year>1996</year>
  </cd>
- <cd>
  <title>The very best of</title>
  <artist>Cat Stevens</artist>
  <country>UK</country>
  <company>Island</company>
  <price>8.90</price>
  <year>1990</year>
  </cd>
- <cd>
  <title>Stop</title>
  <artist>Sam Brown</artist>
  <country>UK</country>
  <company>A and M</company>
  <price>8.90</price>
  <year>1988</year>
  </cd>
- <cd>
  <title>Bridge of Spies</title>
  <artist>T`Pau</artist>
  <country>UK</country>
  <company>Siren</company>
  <price>7.90</price>
  <year>1987</year>
  </cd>
- <cd>
  <title>Private Dancer</title>
  <artist>Tina Turner</artist>
  <country>UK</country>
  <company>Capitol</company>
  <price>8.90</price>
  <year>1983</year>
  </cd>
- <cd>
  <title>Midt om natten</title>
  <artist>Kim Larsen</artist>
  <country>EU</country>
  <company>Medley</company>
  <price>7.80</price>
  <year>1983</year>
  </cd>
- <cd>
  <title>Pavarotti Gala Concert</title>
  <artist>Luciano Pavarotti</artist>
  <country>UK</country>
  <company>DECCA</company>
  <price>9.90</price>
  <year>1991</year>
  </cd>
- <cd>
  <title>The dock of the bay</title>
  <artist>Otis Redding</artist>
  <country>USA</country>

10
  <company>Atlantic</company>
  <price>7.90</price>
  <year>1987</year>
  </cd>
- <cd>
  <title>Picture book</title>
  <artist>Simply Red</artist>
  <country>EU</country>
  <company>Elektra</company>
  <price>7.20</price>
  <year>1985</year>
  </cd>
- <cd>
  <title>Red</title>
  <artist>The Communards</artist>
  <country>UK</country>
  <company>London</company>
  <price>7.80</price>
  <year>1987</year>
  </cd>
- <cd>
  <title>Unchain my heart</title>
  <artist>Joe Cocker</artist>
  <country>USA</country>
  <company>EMI</company>
  <price>8.20</price>
  <year>1987</year>
  </cd>
  </catalog>

4.3 Create an XSL Style Sheet

Then you create an XSL Style Sheet ("cdcatalog.xsl") with a


transformation template:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

11
View "cdcatalog.xsl"

4.4 Link the XSL Style Sheet to the XML Document

Add the XSL style sheet reference to your XML document


("cdcatalog.xml"):

<?xml version="1.0" encoding="ISO-8859-1"?>


<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
.
</catalog>

If you have an XSLT compliant browser it will nicely transform your XML into XHTML!

View the result!

4.5 My CD Collection
Title Artist
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
Greatest Hits Dolly Parton
Still got the blues Gary Moore
Eros Eros Ramazzotti
One night only Bee Gees
Sylvias Mother Dr.Hook
Maggie May Rod Stewart
Romanza Andrea Bocelli
When a man loves a woman Percy Sledge
Black angel Savage Rose
1999 Grammy Nominees Many
For the good times Kenny Rogers
Big Willie style Will Smith
Tupelo Honey Van Morrison

12
Soulsville Jorn Hoel
The very best of Cat Stevens
Stop Sam Brown
Bridge of Spies T`Pau
Private Dancer Tina Turner
Midt om natten Kim Larsen
Pavarotti Gala Concert Luciano Pavarotti
The dock of the bay Otis Redding
Picture book Simply Red
Red The Communards
Unchain my heart Joe Cocker

The details of the example above will be explained in the next chapters!

5 XSLT – Templates

An XSL style sheet consists of one or more set of rules that are called templates.

Each template contains rules to apply when a specified node is matched.

5.1 The <xsl:template> Element

The <xsl:template> element is used to build templates.

The match attribute is used to associate a template with an XML element. The match attribute can
also be used to define a template for the entire XML document. The value of the match attribute is
an XPath expression (i.e. match="/" defines the whole document).

Ok, let's look at a simplified version of the XSL file from the previous
chapter:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td>.</td>
<td>.</td>
</tr>
</table>

13
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Since an XSL style sheet is an XML document itself, it always begins with the XML declaration: <?
xml version="1.0" encoding="ISO-8859-1"?>.

The next element, <xsl:stylesheet>, defines that this document is an XSLT style sheet document
(along with the version number and XSLT namespace attributes).

The <xsl:template> element defines a template. The match="/" attribute associates the
template with the root of the XML source document.

The content inside the <xsl:template> element defines some HTML to write to the output.

The last two lines defines the end of the template and the end of the style sheet.

The result of the transformation above will look like this:

5.2 My CD Collection
Title Artist
. .

View the XML file, View the XSL file, and View the result

The result from this example was a little disappointing, because no data was copied from the XML
document to the output.

In the next chapter you will learn how to use the <xsl:value-of> element to select values from the
XML elements.

6 XSLT - The <xsl:value-of> Element

The <xsl:value-of> element is used to extract the value of a selected node.

6.1 The <xsl:value-of> Element

The <xsl:value-of> element can be used to extract the value of an


XML element and add it to the output stream of the transformation:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

14
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td><xsl:value-of select="catalog/cd/title"/></td>
<td><xsl:value-of select="catalog/cd/artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Note: The value of the select attribute is an XPath expression. An XPath expression works like
navigating a file system; where a forward slash (/) selects subdirectories.

The result of the transformation above will look like this:

6.2 My CD Collection
Title Artist
Empire Burlesque Bob Dylan

View the XML file, View the XSL file, and View the result

The result from this example was also a little disappointing, because only one line of data was
copied from the XML document to the output.

In the next chapter you will learn how to use the <xsl:for-each> element to loop through the XML
elements, and display all of the records.

7 XSLT - The <xsl:for-each> Element

The <xsl:for-each> element allows you to do looping in XSLT.

7.1 The <xsl:for-each> Element

The XSL <xsl:for-each> element can be used to select every XML


element of a specified node-set:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"

15
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Note: The value of the select attribute is an XPath expression. An XPath expression works like
navigating a file system; where a forward slash (/) selects subdirectories.

The result of the transformation above will look like this:

7.2 My CD Collection
Title Artist
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
Greatest Hits Dolly Parton
Still got the blues Gary More
Eros Eros Ramazzotti
One night only Bee Gees
Sylvias Mother Dr.Hook
Maggie May Rod Stewart
Romanza Andrea Bocelli
When a man loves a woman Percy Sledge
Black angel Savage Rose
1999 Grammy Nominees Many
For the good times Kenny Rogers
Big Willie style Will Smith
Tupelo Honey Van Morrison
Soulsville Jorn Hoel
The very best of Cat Stevens
Stop Sam Brown
Bridge of Spies T`Pau
Private Dancer Tina Turner

16
Midt om natten Kim Larsen
Pavarotti Gala Concert Luciano Pavarotti
The dock of the bay Otis Redding
Picture book Simply Red
Red The Communards
Unchain my heart Joe Cocker

View the XML file, View the XSL file, and View the result

7.3 Filtering the Output

We can also filter the output from the XML file by adding a criterion to the select attribute in the
<xsl:for-each> element.

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

Legal filter operators are:

 =  (equal)
 != (not equal)
 &lt; less than
 &gt; greater than

Take a look at the adjusted XSL style sheet:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

The result of the transformation above will look like this:

17
7.4 My CD Collection
Title Artist
Empire Burlesque Bob Dylan

View the XML file, View the XSL file, View the result

8 XSLT - The <xsl:sort> Element

The <xsl:sort> element is used to sort the output.

8.1 Where to put the Sort Information

To sort the output, simply add an <xsl:sort> element inside the


<xsl:for-each> element in the XSL file:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist"/>
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Note: The select attribute indicates what XML element to sort on.

The result of the transformation above will look like this:

8.2 My CD Collection

18
Title Artist
Romanza Andrea Bocelli
One night only Bee Gees
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
The very best of Cat Stevens
Greatest Hits Dolly Parton
Sylvias Mother Dr.Hook
Eros Eros Ramazzotti
Still got the blues Gary Moore
Unchain my heart Joe Cocker
Soulsville Jorn Hoel
For the good times Kenny Rogers
Midt om natten Kim Larsen
Pavarotti Gala Concert Luciano Pavarotti
1999 Grammy Nominees Many
The dock of the bay Otis Redding
When a man loves a woman Percy Sledge
Maggie May Rod Stewart
Stop Sam Brown
Black angel Savage Rose
Picture book Simply Red
Bridge of Spies T`Pau
Red The Communards
Private Dancer Tina Turner
Tupelo Honey Van Morrison
Big Willie style Will Smith

View the XML file, View the XSL file, and View the result

9 XSLT - The <xsl:if> Element

The <xsl:if> element is used to put a conditional test against the content of the XML file.

9.1 The <xsl:if> Element

To put a conditional if test against the content of the XML file, add an <xsl:if> element to the XSL
document.

9.1.1 Syntax
<xsl:if test="expression">

19
...
...some output if the expression is true...
...
</xsl:if>

9.2 Where to Put the <xsl:if> Element

To add a conditional test, add the <xsl:if> element inside the <xsl:for-
each> element in the XSL file:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:if test="price &gt; 10">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Note: The value of the required test attribute contains the expression to be evaluated.

The code above will only output the title and artist elements of the CDs that has a price that is
higher than 10.

The result of the transformation above will look like this:

9.3 My CD Collection
Title Artist
Empire Burlesque Bob Dylan
Still got the blues Gary Moore
One night only Bee Gees
Romanza Andrea Bocelli
Black Angel Savage Rose

20
1999 Grammy Nominees Many

View the XML file, View the XSL file, and View the result

10 XSLT - The <xsl:choose> Element

The <xsl:choose> element is used in conjunction with <xsl:when> and <xsl:otherwise>


to express multiple conditional tests.

10.1 The <xsl:choose> Element

To express a multiple conditional test against the content of the XML file, add an <xsl:choose>
element to the XSL document.

10.1.1 Syntax
<xsl:choose>
<xsl:when test="expression">
... some output ...
</xsl:when>
<xsl:otherwise>
... some output ....
</xsl:otherwise>
</xsl:choose>

10.2 Where to put the Choose Condition

To insert a conditional choose test against the content of the XML file,
add the <xsl:choose>, <xsl:when>, and <xsl:otherwise> elements to
the XSL file:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price &gt; 10">

21
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

The code above will add a pink background-color to the "Artist" column WHEN the price of the CD is
higher than 10.

The result of the transformation will look like this:

10.3 My CD Collection
Title Artist
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
Greatest Hits Dolly Parton
Still got the blues Gary Moore
Eros Eros Ramazzotti
One night only Bee Gees
Sylvias Mother Dr.Hook
Maggie May Rod Stewart
Romanza Andrea Bocelli
When a man loves a woman Percy Sledge
Black angel Savage Rose
1999 Grammy Nominees Many
For the good times Kenny Rogers
Big Willie style Will Smith
Tupelo Honey Van Morrison
Soulsville Jorn Hoel
The very best of Cat Stevens
Stop Sam Brown
Bridge of Spies T`Pau
Private Dancer Tina Turner
Midt om natten Kim Larsen
Pavarotti Gala Concert Luciano Pavarotti
The dock of the bay Otis Redding
Picture book Simply Red
Red The Communards

22
Unchain my heart Joe Cocker

View the XML file, View the XSL file, and View the result

10.4 Another Example

Here is another example that contains two <xsl:when> elements:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price &gt; 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:when test="price &gt; 9 and price &lt;= 10">
<td bgcolor="#cccccc">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

The code above will add a pink background color to the "Artist" column WHEN the price of the CD is
higher than 10, and a grey background-color WHEN the price of the CD is higher than 9 and lower
or equal to 10.

The result of the transformation will look like this:

10.5 My CD Collection
Title Artist

23
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
Greatest Hits Dolly Parton
Still got the blues Gary Moore
Eros Eros Ramazzotti
One night only Bee Gees
Sylvias Mother Dr.Hook
Maggie May Rod Stewart
Romanza Andrea Bocelli
When a man loves a woman Percy Sledge
Black angel Savage Rose
1999 Grammy Nominees Many
For the good times Kenny Rogers
Big Willie style Will Smith
Tupelo Honey Van Morrison
Soulsville Jorn Hoel
The very best of Cat Stevens
Stop Sam Brown
Bridge of Spies T`Pau
Private Dancer Tina Turner
Midt om natten Kim Larsen
Pavarotti Gala Concert Luciano Pavarotti
The dock of the bay Otis Redding
Picture book Simply Red
Red The Communards
Unchain my heart Joe Cocker

View the XML file, View the XSL file, and View the result

11 XSLT - The <xsl:apply-templates> Element

The <xsl:apply-templates> element applies a template to the current element or to the


current element's child nodes.

11.1 The <xsl:apply-templates> Element

The <xsl:apply-templates> element applies a template to the current element or to the current
element's child nodes.

24
If we add a select attribute to the <xsl:apply-templates> element it will process only the child
element that matches the value of the attribute. We can use the select attribute to specify the order
in which the child nodes are processed.

Look at the following XSL style sheet:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
</xsl:stylesheet>

The result of the transformation will look like this:

11.2 My CD Collection

Title: Empire Burlesque


Artist: Bob Dylan

Title: Hide your heart


Artist: Bonnie Tyler

.....

12 XSLT - On the Client

If your browser supports it, XSLT can be used to transform the document to XHTML in
your browser.

12.1 A JavaScript Solution

25
In the previous chapters we have explained how XSLT can be used to transform a document from
XML to XHTML. We did this by adding an XSL style sheet to the XML file and let the browser do the
transformation.

Even if this works fine, it is not always desirable to include a style sheet reference in an XML file
(e.g. it will not work in a non XSLT aware browser.)

A more versatile solution would be to use a JavaScript to do the transformation.

By using a JavaScript, we can:

 do browser-specific testing
 use different style sheets according to browser and user needs

That is the beauty of XSLT! One of the design goals for XSLT was to make it possible to transform
data from one format to another, supporting different browsers and different user needs.

XSLT transformation on the client side is bound to be a major part of the browsers work tasks in the
future, as we will see a growth in the specialized browser market (Braille, aural browsers, Web
printers, handheld devices, etc.)

12.2 The XML File and the XSL File

Look at the XML document that you have seen in the previous
chapters:

<?xml version="1.0" encoding="ISO-8859-1"?>


<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
.
</catalog>

View the XML file.

And the accompanying XSL style sheet:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>

26
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="artist" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XSL file.

Notice that the XML file does not have a reference to the XSL file!

IMPORTANT: The above sentence indicates that an XML file could be transformed using many
different XSL style sheets!

12.3 Transforming XML to XHTML in the Browser

Here is the source code needed to transform the XML file to XHTML on
the client:

<html>
<body>
<script type="text/javascript">
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cdcatalog.xml")
// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog.xsl")
// Transform
document.write(xml.transformNode(xsl))
</script>
</body>
</html>

Tip: If you don't know how to write JavaScript, you can study our JavaScript tutorial.

The first block of code creates an instance of the Microsoft XML parser (XMLDOM), and loads the
XML file into memory. The second block of code creates another instance of the parser and loads
the XSL file into memory. The last line of code transforms the XML document using the XSL
document, and displays the result as XHTML in your browser. Nice!

See how it works in IE.

27
Title Artist
Empire Burlesque Bob Dylan
Hide your heart Bonnie Tyler
. .
. .

13 XSLT - On the Server

Since not all browsers support XSLT, one solution is to transform the XML to XHTML on
the server.

13.1 A Cross Browser Solution


In the previous chapter we explained how XSLT can be used to transform a document from XML to
XHTML in the browser. We created a JavaScript that used an XML parser to do the transformation.
The JavaScript solution will not work in a browser that doesn't have an XML parser.

To make XML data available to all kind of browsers, we must transform the XML document on the
SERVER and send it as XHTML back to the browser.

That's another beauty of XSLT. One of the design goals for XSLT was to make it possible to
transform data from one format to another on a server, returning readable data to all kinds of
browsers.

13.2 The XML File and the XSLT File

Look at the XML document that you have seen in the previous
chapters:

<?xml version="1.0" encoding="ISO-8859-1"?>


<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
.
.
.
</catalog>

View the XML file.

And the accompanying XSL style sheet:

28
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title" /></td>
<td><xsl:value-of select="artist" /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XSL file.

Notice that the XML file does not have a reference to the XSL file!

IMPORTANT: The above sentence indicates that an XML file could be transformed using many
different XSL style sheets!

13.3 Transforming XML to XHTML on the Server

Here is the ASP source code needed to transform the XML file to
XHTML on the server:

<%
'Load XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("cdcatalog.xml"))

'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("cdcatalog.xsl"))

'Transform file
Response.Write(xml.transformNode(xsl))
%>

Tip: If you don't know how to write ASP, you can study our ASP tutorial.

29
The first block of code creates an instance of the Microsoft XML parser (XMLDOM), and loads the
XML file into memory. The second block of code creates another instance of the parser and loads
the XSL file into memory. The last line of code transforms the XML document using the XSL
document, and sends the result as XHTML to your browser. Nice!

See how it works.(same as before)

14 XSLT - Editing XML

Data stored in XML files can be edited from an Internet browser.

14.1 Open, Edit and Save XML

Now, we will show how to open, edit, and save an XML file that is stored on the server.

We will use XSL to transform the XML document into an HTML form. The values of the XML elements
will be written to HTML input fields in an HTML form. The HTML form is editable. After editing the
data, the data is going to be submitted back to the server and the XML file will be updated (this part
is done with ASP).

14.2 The XML File and the XSL File

First, look at the XML document that will be used ("tool.xml"):

<?xml version="1.0" encoding="ISO-8859-1"?>


<tool>
<field id="prodName">
<value>HAMMER HG2606</value>
</field>
<field id="prodNo">
<value>32456240</value>
</field>
<field id="price">
<value>$30.00</value>
</field>
</tool>

View the XML file.

Then, take a look at the following style sheet ("tool.xsl"):

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<form method="post" action="edittool.asp">

30
<h2>Tool Information (edit):</h2>
<table border="0">
<xsl:for-each select="tool/field">
<tr>
<td>
<xsl:value-of select="@id"/>
</td>
<td>
<input type="text">
<xsl:attribute name="id">
<xsl:value-of select="@id" />
</xsl:attribute>
<xsl:attribute name="name">
<xsl:value-of select="@id" />
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="value" />
</xsl:attribute>
</input>
</td>
</tr>
</xsl:for-each>
</table>
<br />
<input type="submit" id="btn_sub" name="btn_sub" value="Submit" />
<input type="reset" id="btn_res" name="btn_res" value="Reset" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XSL file.

The XSL file above loops through the elements in the XML file and creates one input field for each
XML "field" element. The value of the XML "field" element's "id" attribute is added to both the "id"
and "name" attributes of each HTML input field. The value of each XML "value" element is added to
the "value" attribute of each HTML input field. The result is an editable HTML form that contains the
values from the XML file.

Then, we have a second style sheet: "tool_updated.xsl". This is the


XSL file that will be used to display the updated XML data. This style
sheet will not result in an editable HTML form, but a static HTML table:

<?xml version="1.0" encoding="ISO-8859-1"?>


<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Updated Tool Information:</h2>
<table border="1">
<xsl:for-each select="tool/field">
<tr>
<td><xsl:value-of select="@id" /></td>
<td><xsl:value-of select="value" /></td>
</tr>

31
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XSL file.

14.3 The ASP File

The HTML form in the "tool.xsl" file above has an action attribute with a value of "edittool.asp".

The "edittool.asp" page contains two functions: The loadFile() function


loads and transforms the XML file for display and the updateFile()
function applies the changes to the XML file:

<%
function loadFile(xmlfile,xslfile)
Dim xmlDoc,xslDoc
'Load XML file
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
'Load XSL file
set xslDoc = Server.CreateObject("Microsoft.XMLDOM")
xslDoc.async = false
xslDoc.load(xslfile)
'Transform file
Response.Write(xmlDoc.transformNode(xslDoc))
end function
function updateFile(xmlfile)
Dim xmlDoc,rootEl,f
Dim i
'Load XML file
set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load(xmlfile)
'Set the rootEl variable equal to the root element
Set rootEl = xmlDoc.documentElement
'Loop through the form collection
for i = 1 To Request.Form.Count
'Eliminate button elements in the form
if instr(1,Request.Form.Key(i),"btn_")=0 then
'The selectSingleNode method queries the XML file for a
'single node that matches a query. This query requests
'the value element that is the child of a field element
'that has an id attribute which matches the current key
'value in the Form Collection. When there is a match -
'set the text property equal to the value of the current
'field in the Form Collection.
set f = rootEl.selectSingleNode("field[@id='" & _
Request.Form.Key(i) & "']/value")
f.Text = Request.Form(i)

32
end if
next
'Save the modified XML file
xmlDoc.save xmlfile
'Release all object references
set xmlDoc=nothing
set rootEl=nothing
set f=nothing
'Load the modified XML file with a style sheet that
'allows the client to see the edited information
loadFile xmlfile,server.MapPath("tool_updated.xsl")
end function
'If the form has been submitted update the
'XML file and display result - if not,
'transform the XML file for editing
if Request.Form("btn_sub")="" then
loadFile server.MapPath("tool.xml"),server.MapPath("tool.xsl")
else
updateFile server.MapPath("tool.xml")
end if
%>

Tip: If you don't know how to write ASP, you can study our ASP tutorial.

Note: We are doing the transformation and applying the changes to the XML file on the server. This
is a cross-browser solution. The client will only get HTML back from the server - which will work in
any browser!

15 XML Editors

If you are serious about XML, you will benefit from using a professional XML Editor.

15.1 XML is Text-based

XML is a text-based markup language.

One great thing about XML is that XML files can be created and edited using a simple text-editor like
Notepad.

However, when you start working with XML, you will soon find that it is better to edit XML
documents using a professional XML editor.

15.2 Why Not Notepad?

Many web developers use Notepad to edit both HTML and XML documents because Notepad is
included with the most common OS and it is simple to use. Personally I often use Notepad for quick
editing of simple HTML, CSS, and XML files.

But, if you use Notepad for XML editing, you will soon run into problems.

33
Notepad does not know that you are writing XML, so it will not be able to assist you.

15.3 Why an XML Editor?

Today XML is an important technology, and development projects use XML-based technologies like:

 XML Schema to define XML structures and data types


 XSLT to transform XML data
 SOAP to exchange XML data between applications
 WSDL to describe web services
 RDF to describe web resources
 XPath and XQuery to access XML data
 SMIL to define graphics

To be able to write error-free XML documents, you will need an intelligent XML editor!

15.4 XML Editors

Professional XML editors will help you to write error-free XML documents, validate your XML against
a DTD or a schema, and force you to stick to a valid XML structure.

An XML editor should be able to:

 Add closing tags to your opening tags automatically


 Force you to write valid XML
 Verify your XML against a DTD
 Verify your XML against a Schema
 Color code your XML syntax

15.5 Altova's XMLSPY

At W3Schools we have been using XMLSPY for many years. XMLSPY is our favorite XML editor.
These are some of the features we especially like:

 Easy to use
 Syntax coloring
 Automatic tag completion
 Automatic well-formed check
 Easy switching between text view and grid view
 Built in DTD and / or Schema validation
 Built in graphical XML Schema designer
 Powerful conversion utilities
 Database import and export
 Built in templates for most XML document types
 Built in XPath analyzer
 Full SOAP and WSDL capabilities
 Powerful project management

34
Read more about XMLSPY

16 XSLT Elements Reference

The XSLT elements from the W3C Recommendation (XSLT Version 1.0).

16.1 XSLT Elements

The links in the "Element" column point to attributes and more useful information about each
specific element.

 NN: indicates the earliest version of Netscape that supports the tag
 IE: indicates the earliest version of Internet Explorer that supports the tag

Elements supported in IE 5.x may have NON-standard behavior,


Note:
because IE 5.x was released before XSLT became an official W3C
Recommendation. However, IE 6.x has full XML / XSLT 1.0 / XPath 1.0
support!

Element Description IE NN
apply-imports Applies a template rule from an imported style sheet 6.0  
apply-templates Applies a template rule to the current element or to 5.0 6.0
the current element's child nodes
attribute Adds an attribute 5.0 6.0
attribute-set Defines a named set of attributes 6.0 6.0
call-template Calls a named template 6.0 6.0
choose Used in conjunction with <when> and <otherwise> to 5.0 6.0
express multiple conditional tests
comment Creates a comment node in the result tree 5.0 6.0
copy Creates a copy of the current node (without child 5.0 6.0
nodes and attributes)
copy-of Creates a copy of the current node (with child nodes 6.0 6.0
and attributes)
decimal-format Defines the characters and symbols to be used when 6.0  
converting numbers into strings, with the format-
number() function
element Creates an element node in the output document 5.0 6.0
fallback Specifies an alternate code to run if  the processor 6.0  
does not support an XSLT element
for-each Loops through each node in a specified node set 5.0 6.0
if Contains a template that will be applied only if a 5.0 6.0
specified condition is true
import Imports the contents of one style sheet into another. 6.0 6.0
Note: An imported style sheet has lower precedence
than the importing style sheet

35
include Includes the contents of one style sheet into another. 6.0 6.0
Note: An included style sheet has the same
precedence as the including style sheet
key Declares a named key that can be used in the style 6.0 6.0
sheet with the key() function
message Writes a message to the output (used to report errors) 6.0 6.0
namespace-alias Replaces a namespace in the style sheet to a different 6.0  
namespace in the output
number Determines the integer position of the current node 6.0 6.0
and formats a number
otherwise Specifies a default action for the <choose> element 5.0 6.0
output Defines the format of the output document 6.0 6.0
param Declares a local or global parameter 6.0 6.0
preserve-space Defines the elements for which white space should be 6.0 6.0
preserved
processing-instruction Writes a processing instruction to the output 5.0 6.0
sort Sorts the output 6.0 6.0
strip-space Defines the elements for which white space should be 6.0 6.0
removed
stylesheet Defines the root element of a style sheet 5.0 6.0
template Rules to apply when a specified node is matched 5.0 6.0
text Writes literal text to the output 5.0 6.0
transform Defines the root element of a style sheet 6.0 6.0
value-of Extracts the value of a selected node 5.0 6.0
variable Declares a local or global variable 6.0 6.0
when Specifies an action for the <choose> element 5.0 6.0
with-param Defines the value of a parameter to be passed into a 6.0 6.0
template

17 XSLT Functions

XQuery 1.0, XPath 2.0, and XSLT 2.0 share the same functions library.

17.1 XSLT Functions

XSLT includes over 100 built-in functions. There are functions for string values, numeric values,
date and time comparison, node and QName manipulation, sequence manipulation, Boolean values,
and more.

The URI of the XSLT function namespace is:


http://www.w3.org/2005/02/xpath-functions

The default prefix for the function namespace is fn:.

Tip: Functions are often called with the fn: prefix, such as fn:string(). However, since fn: is the
default prefix of the namespace, the function names do not need to be prefixed when called.

The reference of all the built-in XSLT 2.0 functions is located in our XPath tutorial.

36
In addition, there are the following built-in XSLT functions:

Name Description
current() Returns the current node
document() Used to access the nodes in an external XML document
element-available() Tests whether the element specified is supported by the XSLT processor
format-number() Converts a number into a string
function-available() Tests whether the function specified is supported by the XSLT processor
generate-id() Returns a string value that uniquely identifies a specified node
key() Returns a node-set using the index specified by an <xsl:key> element
system-property() Returns the value of the system properties
unparsed-entity-uri() Returns the URI of an unparsed entity

18 The current() Function


18.1 Definition and Usage

The current() function returns a node-set that contains only the current node. Usually the current
node and the context node are the same.

<xsl:value-of select="current()"/>

is equal to

<xsl:value-of select="."/>

However, there is one difference. Look at the following XPath expression: "catalog/cd". This
expression selects the <catalog> child nodes of the current node, and then it selects the <cd> child
nodes of the <catalog> nodes. This means that on each step of evaluation, the "." has a different
meaning.

The following line:

<xsl:apply-templates select="//cd[@title=current()/@ref]"/>

will process all cd elements that have a title attribute with value equal to the value of the current
node's ref attribute.

This is different from

<xsl:apply-templates select="//cd[@title=./@ref]"/>

that will process all cd elements that have a title attribute and a ref attribute with the same value.

18.2 Syntax
node-set current()

37
18.2.1 Example 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="catalog/cd/artist">
Current node: <xsl:value-of select="current()"/>
<br />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XML file, View the XSL file, and View the result.

Current node: Bob Dylan


Current node: Bonnie Tyler

19 The document() Function

19.1 Definition and Usage

The document() function is used to access nodes in an external XML document. The external XML
document must be valid and parsable.

One way to use this function is to look up data in an external document. For example we want to
find the Celsius value from a Fahrenheit value and we refer to a document that contains some pre-
computed results:

<xsl:value-of select="document('celsius.xml')/celsius/result[@value=$value]"/>

19.2 Syntax
node-set document(object,node-set?)

19.3 Parameters
Parameter Description
object Required. Defines an URI to an external XML document
node-set Optional. Used to resolve relative URI

20 The element-available() Function


20.1 Definition and Usage

38
The element-available() function returns a Boolean value that indicates whether the element
specified is supported by the XSLT processor.

This function can only be used to test elements that can occur in a template body. These elements
are:

 xsl:apply-imports
 xsl:apply-templates
 xsl:attributes
 xsl:call-template
 xsl:choose
 xsl:comment
 xsl:copy
 xsl:copy-of
 xsl:element
 xsl:fallback
 xsl:for-each
 xsl:if
 xsl:message
 xsl:number
 xsl:processing instruction
 xsl:text
 xsl:value-of
 xsl:variable

20.2 Syntax
boolean element-available(string)

20.3 Parameters
Parameter Description
string Required. Specifies the element to test

20.3.1 Example 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:choose>
<xsl:when test="element-available('xsl:comment')">
<p>xsl:comment is supported.</p>
</xsl:when>
<xsl:otherwise>
<p>xsl:comment is not supported.</p>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="element-available('xsl:delete')">
<p>xsl:delete is supported.</p>

39
</xsl:when>
<xsl:otherwise>
<p>xsl:delete is not supported.</p>
</xsl:otherwise>
</xsl:choose>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XSL file and View the result.

xsl:comment is supported.

xsl:delete is not supported.

21 The format-number() Function


21.1 Definition and Usage

The format-number() function is used to convert a number into a string.

21.2 Syntax
string format-number(number,format,[decimalformat])

21.3 Parameters
Parameter Description
number Required. Specifies the number to be formatted
format Required. Specifies the format pattern. Here are some of the characters used in the
formatting pattern:
 # (Denotes a digit. Example: ####)
 0 (Denotes leading and following zeros. Example: 0000.00)
 . (The position of the decimal point Example: ###.##)
 , (The group separator for thousands. Example: ###,###.##)
 % (Displays the number as a percentage. Example: ##%)
 ; (Pattern separator. The first pattern will be used for positive numbers and
the second for negative numbers)
decimalformat Optional.

21.3.1 Example 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:value-of select='format-number(500100, "#.00")' />
<br />

40
<xsl:value-of select='format-number(500100, "#.0")' />
<br />
<xsl:value-of select='format-number(500100, "###,###.00")' />
<br />
<xsl:value-of select='format-number(0.23456, "##%")' />
<br />
<xsl:value-of select='format-number(500100, "#######")' />
</body>
</html>
</xsl:template>

</xsl:stylesheet>

View the XSL file and View the result.

500100.00
500100.0
500,100.00
23%
500100

22 The function-available() Function


22.1 Definition and Usage

The function-available() function returns a Boolean value that indicates whether the function
specified is supported by the XSLT processor.

You may test the XSLT functions and the inherited XPath functions.

22.2 Syntax
boolean function-available(string)

22.3 Parameters
Parameter Description
string Required. Specifies the function to test

22.3.1 Example 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:choose>
<xsl:when test="function-available('sum')">
<p>sum() is supported.</p>
</xsl:when>
<xsl:otherwise>

41
<p>sum() is not supported.</p>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="function-available('current')">
<p>current() is supported.</p>
</xsl:when>
<xsl:otherwise>
<p>current() is not supported.</p>
</xsl:otherwise>
</xsl:choose>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XSL file and View the result

sum() is supported.

current() is supported.

23 The generate-id() Function


23.1 Definition and Usage

The generate-id() function returns a string value that uniquely identifies a specified node.

If the node-set specified is empty, an empty string is returned. If you omit the node-set parameter,
it defaults to the current node.

23.2 Syntax
string generate-id(node-set?)

23.3 Parameters
Parameter Description
node-set Optional. Specifies on which node-set to generate a unique id

23.3.1 Example 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h3>Artists:</h3>
<ul>
<xsl:for-each select="catalog/cd">
<li>

42
<a href="#{generate-id(artist)}">
<xsl:value-of select="artist" /></a>
</li>
</xsl:for-each>
</ul>
<hr />
<xsl:for-each select="catalog/cd">
Artist: <a name="{generate-id(artist)}">
<xsl:value-of select="artist" /></a>
<br />
Title: <xsl:value-of select="title" />
<br />
Price: <xsl:value-of select="price" />
<hr />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XML file, View the XSL file, and View the result.

24 The key() Function


24.1 Definition and Usage

The key() function returns a node-set from the document, using the index specified by an
<xsl:key> element.

24.2 Syntax
node-set key(string, object)

24.3 Parameters
Parameter Description
string Required. Specifies the name of an xsl:key element
object Required. A string to search for

24.3.1 Example 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="cdlist" match="cd" use="title" />

<xsl:template match="/">
<html>
<body>
<xsl:for-each select="key('cdlist', 'Empire Burlesque')">
<p>
Title: <xsl:value-of select="title" />

43
<br />
Artist: <xsl:value-of select="artist" />
<br />
Price: <xsl:value-of select="price" />
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XML file, View the XSL file, and View the result.

Title: Empire Burlesque


Artist: Bob Dylan
Price: 10.90

25 The system-property() Function


25.1 Definition and Usage

The system-property() function returns the value of the system property specified by the name.

System properties in the XSLT namespace:

 xsl:version - The version of XSLT implemented by the processor


 xsl:vendor - The vendor of the XSLT processor
 xsl:vendor-url - The URL identifying the vendor of the XSLT processor

25.2 Syntax
object system-property(string)

25.3 Parameters
Parameter Description
string Required. Specifies the system property to return the value of

25.3.1 Example 1
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<p>
Version:
<xsl:value-of select="system-property('xsl:version')" />
<br />
Vendor:

44
<xsl:value-of select="system-property('xsl:vendor')" />
<br />
Vendor URL:
<xsl:value-of select="system-property('xsl:vendor-url')" />
</p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View the XSL file and View the result

Version: 1
Vendor: Microsoft
Vendor URL: http://www.microsoft.com

26 The unparsed-entity-uri() Function


26.1 Definition and Usage

The unparsed-entity-uri() function returns the URI of an unparsed entity. The name of the entity
must match the passed argument. If there is no such entity an empty string is returned.

If the DTD contains the following declaration:

<!ENTITY pic SYSTEM "http://www.w3schools.com/picture.jpg" NDATA JPEG>

the following expression:

unparsed-entity-uri('pic')

will return the URI for the file "picture.jpg".

26.2 Syntax
string unparsed-entity-uri(string)

26.3 Parameters
Parameter Description
string Required. Specifies the name of an unparsed entity

45

Você também pode gostar