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(_at_)in(_dot_)firstrain(_dot_)com]
Sent: 29 April 2004 12:27
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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
--+------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--