Transforming XML with XSLT
==========================

An Overview
-----------

An Overview

The separation of content and presentation is a key design feature of XML. The structure of an XML document is designed to reflect and clarify important relationships among the individual aspects of the content itself, unhindered by a need to provide any indication about how this data should eventually be presented. This intelligent structuring is particularly important as more and more data transfers are automated and take place between highly heterogeneous machines linked by a network.

Yet eventually much of the content stored in XML documents will need to be presented to human readers. Because a browser provides a familiar and highly flexible interface, it is an ideal mechanism for delivering such presentation versions of XML content. Built from the ground up utilizing a wide variety of XML technologies, Firefox incorporates within itself all of the mechanisms needed to process both original XML documents and the specialized stylesheets used to style and lay them out for HTML display, reducing server load with client-side processing.

At present, Gecko (the layout engine behind Firefox) supports two forms of XML stylesheets. For basic control of appearance — fonts, colors, position, and so forth — Gecko uses CSS.

Our focus here is on the second type of stylesheet that Gecko supports: the XSLT stylesheet. XSLT stands for eXtensible Stylesheet Language/Transform and the name is apt. XSLT allows a stylesheet author to transform a primary XML document in two significant ways: manipulating and sorting the content, including a wholesale reordering of it if so desired, and transforming the content into a different format (and in the case of Firefox, the focus is on converting it on the fly into HTML which can then be displayed by the browser).

XSLT/XPath reference
--------------------

### Elements

Elements

* xsl:apply-imports *(supported)*
* xsl:apply-templates *(supported)*
* xsl:attribute *(supported)*
* xsl:attribute-set *(supported)*
* xsl:call-template *(supported)*
* xsl:choose *(supported)*
* xsl:comment *(supported)*
* xsl:copy *(supported)*
* xsl:copy-of *(supported)*
* xsl:decimal-format *(supported)*
* xsl:element *(supported)*
* xsl:fallback *(not supported)*
* xsl:for-each *(supported)*
* xsl:if *(supported)*
* xsl:import *(mostly supported)*
* xsl:include *(supported)*
* xsl:key *(supported)*
* xsl:message *(supported)*
* xsl:namespace-alias *(not supported)*
* xsl:number *(partially supported)*
* xsl:otherwise *(supported)*
* xsl:output *(partially supported)*
* xsl:param *(supported)*
* xsl:preserve-space *(supported)*
* xsl:processing-instruction
* xsl:sort *(supported)*
* xsl:strip-space *(supported)*
* xsl:stylesheet *(partially supported)*
* xsl:template *(supported)*
* xsl:text *(partially supported)*
* xsl:transform *(supported)*
* xsl:value-of *(partially supported)*
* xsl:variable *(supported)*
* xsl:when *(supported)*
* xsl:with-param *(supported)*
### Axes

Axes

* ancestor
* ancestor-or-self
* attribute
* child
* descendant
* descendant-or-self
* following
* following-sibling
* namespace *(not supported)*
* parent
* preceding
* preceding-sibling
* self
### Functions

Functions

* boolean() *(supported)*
* ceiling() *(supported)*
* concat() *(supported)*
* contains() *(supported)*
* count() *(supported)*
* current() *(supported)*
* document() *(supported)*
* element-available() *(supported)*
* false() *(supported)*
* floor() *(supported)*
* format-number() *(supported)*
* function-available() *(supported)*
* generate-id() *(supported)*
* id() *(partially supported)*
* key() *(supported)*
* lang() *(supported)*
* last() *(supported)*
* local-name() *(supported)*
* name() *(supported)*
* namespace-uri() *(supported)*
* normalize-space() *(supported)*
* not() *(supported)*
* number() *(supported)*
* position() *(supported)*
* round() *(supported)*
* starts-with() *(supported)*
* string() *(supported)*
* string-length() *(supported)*
* substring() *(supported)*
* substring-after() *(supported)*
* substring-before() *(supported)*
* sum() *(supported)*
* system-property() *(supported)*
* translate() *(supported)*
* true() *(supported)*
* unparsed-entity-url() *(not supported)*
For Further Reading
-------------------

For Further Reading

* Books
* Digital
    + Websites
    + Articles
    + Tutorials/Examples
    + Other
Original Document Information
-----------------------------

* Copyright Information: Copyright © 2001-2003 Netscape. All rights reserved.
* Note: This reprinted article was originally part of the DevEdge site.