Re: [xsl] Understanding Identity Transformations

Subject: Re: [xsl] Understanding Identity Transformations
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Sat, 12 Feb 2005 17:05:50 +1100
Read a good book and also these examples from Dave Pawson's XSL-FAQ:

   http://www.dpawson.co.uk/xsl/sect2/identity.html

   http://www.dpawson.co.uk/xsl/sect2/N1930.html


Cheers,
Dimitre Novatchev


On Fri, 11 Feb 2005 15:56:58 -0700, Karl Stubsjoen <kstubs@xxxxxxxxx> wrote:
> Seems like this is pretty standard:
> 
> SAMPLE_001:
> <xsl:template match="node()|@*">
>  <xsl:copy>
>    <xsl:apply-templates select="@*"/>
>    <xsl:apply-templates/>
>  </xsl:copy>
> </xsl:template>
> 
> But then I've also seen this:
> 
> SAMPLE_002:
> <xsl:template match="/ | @* | node()">
>   <xsl:copy>
>     <xsl:apply-templates select="@* | node()"/>
>   </xsl:copy>
> </xsl:template>
> 
> How do they compare?  I make not of the SAMPLE_001 within the xsl:copy
> there are 2 apply templates, what does each do?
> 
> Then, understanding what is happening, is the following sample true
> that this will strip an XML doc of all attribute elements?
> 
> SAMPLE_003:
> <xsl:template match="*">
>  <xsl:copy>
>    <xsl:apply-templates select="*"/>
>  </xsl:copy>
> </xsl:template>
> 
> And finally, when I identity transform the following my document i
> quadrupled in size, but I though I was following standard practices
> from previous example.
> 
> SAMPLE_004:
> <xsl:template match="*">
>  <xsl:copy>
>    <xsl:apply-templates select="*"/>
>    <xsl:apply-templates />
>  </xsl:copy>
> </xsl:template>
> 
> Ahh, I think I understand what is going on in SAMPLE_004 (please
> confirm) I am basically applying templates for all nodes twice and in
> the case of lets say SAMPLE_001 the first apply-templates simply gets
> all attributes, the 2nd then gets all nodes.  We'd call this a
> recursive call on the node set?
> 
> Karl

Current Thread