xsl-list
[Top] [All Lists]

Re: problem - generating XML schema via XSLT

2003-10-03 13:35:37
In 1.0 there is no direct way of doing this. The nearest equivalent is:

<xsl:variable name="dummy">
  <xsl:element name="e" namespace="{(_at_)prefix}"/>
</xsl:variable>

<xsl:copy 
select="xx:node-set($dummy)/*/namespace::*[(_dot_)=(_at_)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="{(_at_)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