RE: [xsl] Add attribute to all node

Subject: RE: [xsl] Add attribute to all node
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Thu, 29 Apr 2004 14:14:24 +0100
It should add the attribute to every element, but you're relying on a very
obscure features of the spec. (Which processor are you using? Some are
better than others at implementing obscure features correctly.)

match="//*" matches exactly the same nodes as match="*", but has a higher
default priority than match="*". Therefore your first rule should always be
chosen to match element nodes. But to make things clearer, Change the first
rule to say match="*", and the second to say match="text()|@*".

(And you don't need to apply-templates to the attribute nodes, it's
overkill. Change the <xsl:apply-templates select="@*"/> to <xsl:copy-of
select="@*"/>).

Michael Kay 

> -----Original Message-----
> From: Animesh Sharma [mailto:asharma@xxxxxxxxxxxxxxxx] 
> Sent: 29 April 2004 12:27
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Add attribute to all node
> 
> Hi,
> 
> I want to write an XSL which will add the particular 
> attribute in all node in the DOM tree.
> 
> 
> <xsl:template match="//*">
> 	<xsl:copy>
> 		<xsl:apply-templates select="@*"/>
> 		<xsl:attribute name="test1">Name</xsl:attribute>
> 		<xsl:apply-templates select="text()|*"/>
> 	</xsl:copy>
> </xsl:template>
> 
> <xsl:template match="*|text()|@*">
> 	<xsl:copy>
> 		<xsl:apply-templates select="*|text()|@*"/>
> 	</xsl:copy>
> </xsl:template>
> 
> It adds the attribute only in root element. Is there way to 
> do this stuff recursively?
> Thanks in anticipation of your help,
> 
> Regards,
> Animesh

Current Thread