XSLT for Dummies
|
Chapter 15 - Namespaces Revisited | |
XSLT For Dummies | |
by Richard Wagner | |
Hungry Minds 2002 |
Now that you talk namespace and youve got your mother-in-laws QName problem solved , its time to add namespaces to your result documents. You can add namespaces to an output document by performing two steps:
Suppose, for example, that I use the following nations.xml file as the source document, as shown in Listing 15-1. Listing 15-1: nations.xml
<?xml version="1.0"?> <nationstates> <nation>Botswana</nation> <nation>Burkina Faso</nation> <nation>Cameroon</nation> <nation>Canada</nation> <nation>France</nation> <nation>Netherlands</nation> <nation>United Kingdom</nation> </nationstates>
In this illustration, I add a United Nations namespace to this source and generate a new result document, using the namespace URI of http://www.un.org with a prefix of un: . To do so, a stylesheet needs to include this information as a namespace declaration: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:un="http://www.un.org"> In the template rules, I add the un: abbreviation onto the nationstates and nation elements. The complete stylesheet follows :
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:un="http://www.un.org"> <xsl:output method="xml" omit-xml-declaration="yes"/> <xsl:template match="nationstates"> <un:nationstates><xsl:apply-templates/></un:nationstates> </xsl:template> <xsl:template match="nation"> <un:nation><xsl:value-of select="."/></un:nation> </xsl:template> </xsl:stylesheet> When the XSLT processor transforms the source document (refer to Listing 15-1) based on this stylesheet, the result is: <un:nationstates xmlns:un="http://www.un.org"> <un:nation>Botswana</un:nation> <un:nation>Burkina Faso</un:nation> <un:nation>Cameroon</un:nation> <un:nation>Canada</un:nation> <un:nation>France</un:nation> <un:nation>Netherlands</un:nation> <un:nation>United Kingdom</un:nation> </un:nationstates> As you can see, the XSLT processor automatically adds the xmlns declaration to the document element of the result document. The un: namespace prefixes are now included as a result of the template rules. Technical Stuff If you take a quick glance at the result documents from previous chapters, it appears that I have avoided using namespaces. Actually, when you dont explicitly define a namespace, XSLT uses the default namespace. Although the default (or null) namespace has no visible presence in the document, dont confuse its implicit nature with no namespace at all.
|