Subject: RE: 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: 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
|