xsl-list
[Top] [All Lists]

Re: Re: Excluding one particular attribute(namespace) when copying elements

2003-10-31 16:38:01
Hi Dimitre,

This one is working. But I found out another
interesting thing here and i think it may need people
attention.

Here is xml, xslt and output

test1.xml

<D
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
        <x>1</x>
        <y>2</y>
        <z>3</z>
</D>

test1.xslt:

<xsl:template match="D">
<D>
<xsl:if test="./*[name(.) = 'x']">
<xsl:copy-of select="./*[name(.) = 'x']"/>
</xsl:if>
</D>
</xsl:template>

Output:

<D>
<x
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>1</x>
</D>


My question is: Why the "xmlna:xsi......." was
inserted in the element x here?

Any anwser?


Thanks

Dongling





--- Dimitre Novatchev <dnovatchev(_at_)yahoo(_dot_)com> wrote:
I need to copy different element to output. For
all
the elements I need to exclude the namespace
attribute
when i use "xsl:copy-of" or "xsl:copy". It seems
difficult to specify this in XSLT. Any comment
would
be appreciated!

Use something like this:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:output omit-xml-declaration="yes"/>

  <xsl:template match="t">
    <xsl:element name="{name()}">
      <xsl:copy-of select="namespace::*[not(. =
'b')]"/>
      <xsl:copy-of select="@* | node()"/>
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

When this transformation is applied on the following
source.xml:

     <t xmlns:a="a" xmlns:b="b"/>

the result is:

     <t xmlns:a="a"/>

so the namespace "b" has been excluded.


Hope this helped.


=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL




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



__________________________________
Do you Yahoo!?
Exclusive Video Premiere - Britney Spears
http://launch.yahoo.com/promos/britneyspears/

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