xsl-list
[Top] [All Lists]

Re: Identity Transform

2003-09-22 14:10:09
On Mon, Sep 22, 2003 at 08:28:57PM +0000, Abie Hamaoui wrote:
hello there,
why does the standard identity transform use copy instead of copy-of?
ie:
 <xsl:template match="/ | @* | node()">
   <xsl:copy>
     <xsl:apply-templates select="@* | node()"/>
   </xsl:copy>
 </xsl:template>

instead of just
 <xsl:template match="/">
   <xsl:copy-pf select="."/>
 </xsl:template>

xsl:copy-of is a deep copy of a node and its descendants.  using xsl:copy
instead recursively visits the entire document, while your xsl:copy-of
template visits only the root node and copies it in its entirety, as-is.

Using the identity transform, I can have other templates in my
stylesheet, such as:

        <!-- relabel <foo> to become <bar> -->
        <xsl:template match="foo">
         <bar>
          <xsl:apply-templates select="@* | node()"/>
         </bar>
        </xsl:template>

        <!-- prune nodes -->
        <xsl:template match="text() | baz | quuz"/>

        <!-- copy children, selectively delete attributes -->
        <xsl:template match="para">
         <xsl:copy>
          <xsl:apply-templates select="@*[name(.) != 'id'] | node()"/>
         </xsl:copy>
        </xsl:template>

Additionally, xsl:copy-of doesn't give the XSLT processor a chance
to do any optional decoration, like <xsl:output method="xml" indent="yes"/>

Z.


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>