Subject: Re: Getting the root namespace from the input document
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Mon, 5 Feb 2007 16:12:16 +0000
|
On 2/5/07, Mukul Gandhi <gandhi.mukul@xxxxxxxxx> wrote:
On 2/5/07, Andrew Welch <andrew.j.welch@xxxxxxxxx> wrote:
> <xsl:template match="/">
> <Metadata>
> <xsl:copy-of select="namespace::node()"/>
> </Metadata>
> </xsl:template>
I think Andrew means:
<xsl:template match="/manifest">
<Metadata>
<xsl:copy-of select="namespace::*"/>
</Metadata>
</xsl:template>
I did, well spotted!
But namespace:: axis is deprecated in XSLT 2.0 (though, Saxon supports it)
That's interesting... wasn't aware of that.
If you are using XSLT 2.0, the following is perhaps a portable way:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:template match="manifest">
<xsl:variable name="x" select="." />
<Metadata>
<!-- create namespace declarations -->
<xsl:for-each select="in-scope-prefixes($x)">
<xsl:namespace name="{.}"><xsl:value-of
select="namespace-uri-for-prefix(., $x)" /></xsl:namespace>
</xsl:for-each>
<!-- do rest of things -->
</Metadata>
</xsl:template>
</xsl:stylesheet>
That's really cool too. This is all news to me - I didn't think the
prefixes were available to the XSLT processor...?
|