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(_at_)yahoo(_dot_)com]
Sent: 18 August 2005 07:41
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--