Subject: Re: [xsl] The identity transform and attributes From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx> Date: Mon, 21 Jan 2008 16:22:50 +0000 |
On 21/01/2008, Jesper Tverskov <jesper@xxxxxxxxxxx> wrote: > The old way even has the power and fascination of being just one > template, the identity template. This is how the identity template > looks in two specs, in hundreds of books, in thousands of articles and > tutorials, and in millions of XSLT stylesheets until this very day. > > Why change things for the worse just to confuse people? Well the standard identity template is completely non-intuitive in itself... so I think most new XSLT'ers are confused enough by it. I remember in the early days cutting and pasting it the first few times I needed it just because it seemed so strange and hard to reproduce by hand. Having something within xsl:copy was the hardest thing to comprehend, iirc. Anyway, this thread was about understanding a little better how the identity template processes attributes. For example, try this with Saxon: <xsl:template match="@*"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> You get the warning: "The child axis starting at an attribute node will never select anything" The apply-templates call is effectively redundant for some of the node() kinds... so why leave it in? From a human perspective it's nice and compact, but from a processing perspective it's odd. Compact code is a hackers dream and a maintainers nightmare, so its not something to necessarily aspire to. A less compact but possibly more intuitive indentity transform is the one Mike suggested right at the beginning: <xsl:template match="element()"> <xsl:copy> <xsl:apply-templates select="@*,node()"/> </xsl:copy> </xsl:template> <xsl:template match="attribute()|text()|comment()|processing-instruction()"> <xsl:copy/> </xsl:template> Had that been the one that I learnt, I might have realised sooner that attributes don't have children (and I might have understood the whole thing a little quicker). As the original identity template is ingrained in my mind though I'll continue to use that - along with the "@*, node()" modification. -- Andrew Welch http://andrewjwelch.com Kernow: http://kernowforsaxon.sf.net/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] The identity transform an, David Carlisle | Thread | Re: [xsl] The identity transform an, Jesper Tverskov |
Re: [xsl] The identity transform an, David Carlisle | Date | Re: [xsl] The identity transform an, Jesper Tverskov |
Month |