[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
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: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/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] copy-of "canonicalizatio, Michael Kay | Thread | RE: [xsl] copy-of "canonicalizatio, Michael Kay |
[xsl] resolving entities, Rui Alberto L. | Date | Re: [xsl] Indent?, Joseph Kesselman |
Month |
Keywords