Re: [xsl] copy-of "canonicalization" behavior in Xalan (Java)

Subject: Re: [xsl] copy-of "canonicalization" behavior in Xalan (Java)
From: Mukul Gandhi <mukul_gandhi@xxxxxxxxx>
Date: Fri, 23 Jul 2004 05:36:55 -0700 (PDT)
I wrote this stylesheet

<?xml version="1.0"?> 
<xsl:output method="xml" /> 
<xsl:template match="node()"> 
       <xsl:value-of select="namespace-uri()" />
     <xsl:for-each select="@*">
       <xsl:attribute name="{name()}">
         <xsl:value-of select="." />
     <xsl:apply-templates />

When it is applied to the given XML, Xalan produces
"Could not resolve namespace prefix: xmlns. The node
will be ignored."

My questions are
1) Is it possible to generate attribute names like
xmlns:something (i.e. how to escape special meaning of
xmlns: in XSLT for namespaces)
2) If this is possible, then is it architecturally


--- Matthew McKennirey <mmckennirey@xxxxxxxxxxxxxx>
> The copy-of element when processed by Xalan (Java)
> appears to canonicalize the output, rather than
> output the source tree exactly.
> For specific nodes in the source tree I would like
> to create an identical copy in the result tree,
> including redundant namespace
> declarations.
> Assume a source document like:
> <foo:root xmlns:foo="";
> xmlns:xyz="";>
> 	<foo:parent xmlns:foo="";>
> 		<foo:child xmlns:foo="";>more
> text</foo:child>
> 		<xyz:child xmlns:xyz="";>yet
> more text</xyz:child>
> 	</xyz:parent>
> </foo:root>
> The namespace declarations on the parent and child
> nodes are redundant (their namespace prefixes have
> been bound to a namespace on
> the root node).
> When I use copy-of, such as in the simple template
> below, in XML Spy using its built in XSLT processor
> the result tree is an exact
> and complete copy of the source tree, redundant
> namespace declarations and all, as I would expect.
> <xsl:template match ="/">
>   <xsl:copy-of select="(.)"/>
> </xsl:template>
> (I have simplified the template in the extreme to
> make it clear.)
> When I run the same template with the Xalan (Java)
> XSLT processor, which uses a SAX parser, I get a
> "cleaned", canonical form of the
> source tree as my result, with all redundant
> namespace declarations removed.
> This may appear to be a benefit, but I later
> manipulate parts of the result tree (which is much
> more complex than the simple
> example) as separate XML fragments and at that point
> the namespace declarations are in fact no longer
> redundant but critical.
> I have not been able to find anything in the Xalan
> documentation which suggests a way to avoid this
> canonicalization - perhaps its a
> SAX issue? Is there a way to force Xalan to make an
> exact copy of the source tree, warts and all?
> Thanks

Do you Yahoo!?
Vote for the stars of Yahoo!'s next ad campaign!

Current Thread