[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] Re: problem - generating XML schema via XSLT


Subject: [xsl] Re: problem - generating XML schema via XSLT
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Fri, 3 Oct 2003 22:35:37 +0200

> > In 1.0 there is no direct way of doing this. The nearest equivalent is:
> >
> > <xsl:variable name="dummy">
> >   <xsl:element name="e" namespace="{@prefix}"/>
> > </xsl:variable>
> >
> > <xsl:copy select="xx:node-set($dummy)/*/namespace::*[.=@prefix]"/>
> >
> > This creates a dummy element in the required namespace, and then copies
> > the required namespace node to the result tree.
>
> amazingly, this does not yield any change in the output document. I am
> using Xalan (where the function is named nodeset as opposed to
> node-set). The new namespace decl does not appear.

This example works with Saxon, MSXML, JD, .Net xsltTransform (Framework
1.1).

It also works with Xalan C 1.5 (but with XalanJ 2.1.4 the namespace node is
not copied):


<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:extc="http://exslt.org/common"
 exclude-result-prefixes="extc"
 >
  <xsl:output omit-xml-declaration="yes"/>

  <xsl:template match="library">
    <xsl:variable name="dummy">
      <xsl:element name="e" namespace="{@prefix}"/>
    </xsl:variable>

    <extc:xxx>
      <xsl:copy-of
        select="extc:node-set($dummy)/*/namespace::*[. =
current()/@prefix]"/>
    </extc:xxx>
  </xsl:template>
</xsl:stylesheet>

When the above transformation is applied against this source.xml:

<library prefix="test">
     <element name="dosome"/>
</library>

the result is:

<extc:xxx xmlns:extc="http://exslt.org/common" xmlns="test"/>



=====
Cheers,

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




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



Current Thread