Subject: Re: [xsl] The identity transform and attributes From: Abel Braaksma <abel.online@xxxxxxxxx> Date: Mon, 21 Jan 2008 12:06:22 +0100 |
<xsl:template match="node()"> <xsl:copy> <xsl:copy-of select="@*" /> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template>
<xsl:template match="@*"> <xsl:attribute name="{name()}"> <xsl:apply-templates select="text()" /> </xsl:attribute> </xsl:template>
<xsl:template match="@specialcase/text()"> <xsl:text>other text</xsl:text> </xsl:template>
I'm wondering if the default identity transform should be this:
<xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template>
Or this:
<xsl:template match="node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template>
<xsl:template match="@*"> <xsl:copy/> </xsl:template>
The former is nice and compact, but when the node is an attribute node does the apply-templates call have any effect - even if it's a few clock cycles wasted? It's a pointless instruction at that point. I guess it is too for non-element node()'s such as whitespace?
Also, the shallow copy copies the entire attribute, so there is no opportunity to override the text() of the attribute. The only way is to add a separate matching template for the attribute - the latter perhaps makes this a little clearer.
A useful distinction or a waste of time? :)
cheers
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] The identity transform an, Michael Kay | Thread | Re: [xsl] The identity transform an, Andrew Welch |
RE: [xsl] The identity transform an, Michael Kay | Date | Re: [xsl] The identity transform an, Andrew Welch |
Month |