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