|
Subject: RE: [xsl] Creating namespace attributes From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 18 Aug 2005 09:44:57 +0100 |
XSLT creates a result tree, not serialized XML: and in the tree model,
namespaces and attributes are quite distinct things. You need to create a
namespace node, not an attribute node.
In XSLT 2.0 this is easy, there is an xsl:namespace instruction which works
in a similar way to xsl:attribute.
In XSLT 1.0 it's more difficult. The only way to create a namespace node in
the result tree is by copying one either from the stylesheet or from a
source document. So the workaround is to create a temporary tree containing
an element in the relevant namespace, and then copy the namespace node from
that temporary tree (even this needs the xx:node-set() extension).
<xsl:template match="namespace">
<namespace>
<xsl:for-each select="*">
<xsl:variable name="temp">
<xsl:element name="{name(.)}:dummy" namespace="{.}"/>
<xsl:variable>
<xsl:copy-of select="xx:node-set($temp)//namespace::*"/>
</xsl:for-each>
</namespace>
</xsl:template>
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Arulraj [mailto:p_arulraj@xxxxxxxxx]
> Sent: 18 August 2005 07:41
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Creating namespace attributes
>
> Hi,
>
> I have the following xml
> XML:
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <namespace>
> <bo>http://cal/h2wdms/common/bo/</bo>
> <h2w>http://cal/h2w/common/bo/</h2w>
> </namespace>
>
> I need a output like the following
> -----------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <output><namespace
> xmlns:bo="http://cal/h2wdms/common/bo/"
> xmlns:h2w="http://cal/h2w/common/bo/"/></output>
>
> Here is my XSL:
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:output method="xml"/>
> <xsl:template match="namespace">
> <output>
> <namespace>
> <xsl:for-each select="child::*">
> <xsl:variable name="NameSpace"
> select="name()"></xsl:variable>
> <xsl:variable name="Location"
> select="."></xsl:variable>
> <xsl:variable
> name="NS"><xsl:text>xmlns:</xsl:text><xsl:value-of
> select="$NameSpace"></xsl:value-of></xsl:variable>
> <xsl:attribute name="{$NS}"><xsl:value-of
> select="$Location"/></xsl:attribute>
> </xsl:for-each>
> </namespace>
>
> </output>
> </xsl:template>
> </xsl:stylesheet>
>
> In the above XSL,<xsl:text>xmlns:</xsl:text> is not
> working.
> Any help?
> Thanks in advance
> Regards,
> Arul
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Creating namespace attributes, Arulraj | Thread | [xsl] XSLT Design, Sajeesh N Kakkat |
| Re: [xsl] Increment a variable, David Carlisle | Date | Re: [xsl] Increment a variable, David Carlisle |
| Month |