xsl-list
[Top] [All Lists]

RE: Creating namespace attributes

2005-08-18 01:44:57
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>
--~--



<Prev in Thread] Current Thread [Next in Thread>