This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]