[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] pulling a document with a null namespace into a namespace


Subject: Re: [xsl] pulling a document with a null namespace into a namespace
From: David Carlisle <davidc@xxxxxxxxx>
Date: Fri, 8 Aug 2003 17:36:35 +0100

> I've tried, I really have, but I can't come up with a solution to this.
> 
> Given some document with unknown elements (i.e., I can't enumerate the
> elements inside the stylesheet for special processing) in a null namespace:
> 
> <random>
> 	<elements baz="foo">qux</elements>
> </random>
> 
> Can I use XSLT to process this document and move it into a namespace:
> 
> <w:random xmlns:w="http://wibble.com/ns">
> 	<w:elements baz="foo">qux</elements>
> </w:random>
> 
> Thanks for reading!


the namespace is part of the element name, so as far as XSLT is
concerned this is like saying

Given some document with unknown elements (i.e., I can't enumerate the
elements inside the stylesheet for special processing) in a null namespace:
Can I use XSLT to process this document and prefix every element name
with "A"?

You code them pretty much the same way.

To do the first:

<xsl:template match="*">
 <xsl:element name="concat('A',local-name())">
  <xsl:apply-templates/>
 </xsl:element>
</xsl:template>

To do the second, you do


<xsl:template match="*">
 <xsl:element name="local-name()" namespace="http://wibble.com/ns">
  <xsl:apply-templates/>
 </xsl:element>
</xsl:template>


which will produce 

<random xmlns="http://wibble.com/ns">

If you need to specify the prefix you need a combination of both:



<xsl:template match="*">
 <xsl:element name="concat('w:',local-name())" namespace="http://wibble.com/ns">
  <xsl:apply-templates/>
 </xsl:element>
</xsl:template>


In that case if your stylesheet element already has
xmlns:w="http://wibble.com/ns"
so that the w: prefix is in scope then you could simplify the last to



<xsl:template match="*">
 <xsl:element name="concat('w:',local-name())">
  <xsl:apply-templates/>
 </xsl:element>
</xsl:template>


as xsl:element will use the right namespace for the w: prefix in that
case.

David

________________________________________________________________________
This e-mail has been scanned for all viruses by Star Internet. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords