Subject: RE: [xsl] Identity transformation (without using xsl:copy) From: "Sullivan, Dan" <dsullivan@xxxxxxxxxxx> Date: Sun, 31 Mar 2002 09:15:38 -0800 |
These two xslt files do what I think you want: file: identity.xslt <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> </xsl:stylesheet> file: identEleToUpper.xslt <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="identity.xslt"/> <xsl:output indent="yes"/> <xsl:strip-space elements="*"/> <xsl:template match="*" > <xsl:element name="{translate(local-name(), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')}" namespace="{namespace-uri()}"> <xsl:apply-templates select="node()|@*"/> </xsl:element> </xsl:template> </xsl:stylesheet> You could put the identity transform in identToUpper by setting the priority of the match="*" template. Dan -----Original Message----- From: Roger L. Costello [mailto:costello@xxxxxxxxx] Sent: Sunday, March 31, 2002 11:03 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx; costello@xxxxxxxxx Subject: Re: [xsl] Identity transformation (without using xsl:copy) 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 XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Identity transformation (, Oliver Becker | Thread | [xsl] fileoutput, Laura Jenkins |
Re: [xsl] Using value-of to extract, Oleg Tkachenko | Date | Re: [xsl] Identity transformation (, Oleg Tkachenko |
Month |