Subject: Re: [xsl] Identity transformation (without using xsl:copy) From: "Roger L. Costello" <costello@xxxxxxxxx> Date: Sun, 31 Mar 2002 11:02:56 -0500 |
A few weeks ago I posted a message (below) asking how to do an identity transformation (without using <xsl:copy>) on instance documents that contain namespace declarations. The resounding response was "no way". [Thanks for your input!] Okay, after much testing and reading I have convinced myself that you are correct - <xsl:copy> must be used. It seems to me that this puts some serious limits on XSLT. Consider this simple problem: write a stylesheet which does an identity transformation, but where all element (local) names are converted to upper case. For example: If this is the start document: <?xml version="1.0"?> <j:juicers xmlns:j="http://www.juicers.org"> <j:juicer id="omega"> <name xmlns="http://www.names.org"> Mighty Omega Juicer </name> </j:juicer> </j:juicers> Then this should be the result document: <?xml version="1.0"?> <j:JUICERS xmlns:j="http://www.juicers.org"> <j:JUICER id="omega"> <NAME xmlns="http://www.names.org"> Mighty Omega Juicer </NAME> </j:JUICER> </j:JUICERS> If I could use <xsl:element> then I could easily accomplish this transformation. However, it escapes me how to do it if I am forced to use <xsl:copy>. The more general question is: if I use <xsl:copy> to copy over an input tree to an output tree how can I make modifications to elements names (such as converting the local part to upper case, as shown above), and modifications to each element's (non-namespace declaration) attributes? Thanks! /Roger "Roger L. Costello" wrote: > > Does anyone have a stylesheet which does an identity transformation > without using xsl:copy? The below stylesheet works fine provided the > instance document does not use namespaces, e.g., it does not copy over > the namespace declarations, and it results in an error being generated > when an element is encountered that is explicitly namespace-qualified. > Could someone show me how to enhance this to deal properly with > namespaces? Thanks! /Roger > > identity.xsl > > <?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="*"> > <xsl:element name="{name(.)}"> > <xsl:for-each select="@*"> > <xsl:attribute name="{name(.)}"> > <xsl:value-of select="."/> > </xsl:attribute> > </xsl:for-each> > <xsl:apply-templates/> > </xsl:element> > </xsl:template> > > </xsl:stylesheet> > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: local-name() namespace xslt 2.0, Bryan Rasmussen | Thread | Re: [xsl] Identity transformation (, J.Pietschmann |
Re: [xsl] Using value-of to extract, Ralph Holz | Date | [xsl] Re: Re: Using value-of to ext, Dimitre Novatchev |
Month |