xslt and namespaces


S

S2

hello all, i can't explain this... can someone help me?

this is my xml:

<hello>
<one>
<paragraph>p1</paragraph>
</one>
</hello>


i'd like to change the <hello> element: i want to give it a namespace
and add an atribute. what i want is this:


-------------
<x:hello y:an_attribute="a value for an_attribute"
xmlns:x="some_new_namespace" xmlns:y="other_ns">
<one>
<paragraph>p1</paragraph>
</one>
</x:hello>
-------------


the stylesheet i am using is

-------------
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="xml" indent="yes"/>

<xsl:param name="element_localname" />

<xsl:template match="node()">
<xsl:choose>
<xsl:when test="local-name() = $element_localname">
<xsl:element name="{$element_localname}"
namespace="some_new_namespace">
<xsl:attribute name="an_attribute" namespace="other_ns">a
value for an_attribute</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:element>
</xsl:when>

<!-- copy the rest as is -->
<xsl:eek:therwise>
<xsl:copy>
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:eek:therwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>
-------------


but what i get is

-------------
<?xml version="1.0" encoding="UTF-8"?>
<ns0:hello xmlns:ns0="other_ns" ns0:an_attribute="a value for an_attribute">
<one>
<paragraph>p1</paragraph>
</one>
</ns0:hello>
 
Ad

Advertisements

M

Martin Honnen

S2 said:
hello all, i can't explain this... can someone help me?

this is my xml:

<hello>
<one>
<paragraph>p1</paragraph>
</one>
</hello>


i'd like to change the <hello> element: i want to give it a namespace
and add an atribute. what i want is this:


-------------
<x:hello y:an_attribute="a value for an_attribute"
xmlns:x="some_new_namespace" xmlns:y="other_ns">
<one>
<paragraph>p1</paragraph>
</one>
</x:hello>
-------------


the stylesheet i am using is

-------------
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:eek:utput method="xml" indent="yes"/>

<xsl:param name="element_localname" />

<xsl:template match="node()">
<xsl:choose>
<xsl:when test="local-name() = $element_localname">
<xsl:element name="{$element_localname}"
namespace="some_new_namespace">
<xsl:attribute name="an_attribute" namespace="other_ns">a
value for an_attribute</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:element>
</xsl:when>

<!-- copy the rest as is -->
<xsl:eek:therwise>
<xsl:copy>
<xsl:apply-templates select="node()" />
</xsl:copy>
</xsl:eek:therwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>
-------------


but what i get is

-------------
<?xml version="1.0" encoding="UTF-8"?>
<ns0:hello xmlns:ns0="other_ns" ns0:an_attribute="a value for
an_attribute">
<one>
<paragraph>p1</paragraph>
</one>
</ns0:hello>

Well which XSLT processor do you use?
I tried your sample with Saxon 6.5.5 and the output is

<hello xmlns="some_new_namespace" xmlns:ns0="other_ns"
ns0:an_attribute="a value for an_attribute">

<one xmlns="">

<paragraph>p1</paragraph>

</one>

</hello>
 
Ad

Advertisements

S

S2

Well which XSLT processor do you use?
I tried your sample with Saxon 6.5.5 and the output is

<hello xmlns="some_new_namespace" xmlns:ns0="other_ns"
ns0:an_attribute="a value for an_attribute">

<one xmlns="">

<paragraph>p1</paragraph>

</one>

</hello>

that's the output i want. i am using the eclipse wtp tool. have no idea
witch implementation that uses. so, changing xslt tool will solve it.
thanks!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top