|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: copy-of "canonicalization" behavior in Xalan (Jav
I wrote this stylesheet
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" />
<xsl:template match="node()">
<xsl:copy>
<xsl:attribute
name="xmlns:{substring-before(name(),':')}">
<xsl:value-of select="namespace-uri()" />
</xsl:attribute>
<xsl:for-each select="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
When it is applied to the given XML, Xalan produces
error
"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
correct?
Regards,
Muku
--- Matthew McKennirey <mmckennirey@xxxxxxxxxxxxxx>
wrote:
> 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="http://abc.org/foo#"
> xmlns:xyz="http://xyzinc.com/xyz#">
> <foo:parent xmlns:foo="http://abc.org/foo#">
> <foo:child xmlns:foo="http://abc.org/foo#">more
> text</foo:child>
> <xyz:child xmlns:xyz="http://xyzinc.com/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!
http://advision.webevents.yahoo.com/yahoo/votelifeengine/
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








