Re: [xsl] template match on attribute, copy but change value

Subject: Re: [xsl] template match on attribute, copy but change value
From: david_n_bertoni@xxxxxxxxxx
Date: Thu, 10 Jul 2003 16:08:28 -0700



> Hi,
>   I'm attempting to find a single attribute and change it's value.  I
> thought this should be simple, but it just doesn't seem to be working.
> Looking at the Rec it says that xsl:copy is not allowed to copy the
> attribute and change it's value (what it looks like in the archives that
I
> found as well).  So my question is, can I use the identity transform,
then
> have a template matching a specific attribute and copy the attribute to
the
> result, but change it's value?
>
> XML File:
> <test>
>   <Element myAtt="test">
>     <child/>
>   </Element>
> </test>
>
> XSL File:
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>
>   <xsl:template match="/">
>     <xsl:apply-templates select="*"/>
>   </xsl:template>
>
>   <xsl:template match="@myAtt">
>     <xsl:copy> <!-- this is ignored and will not let me change the value
-->
>     <xsl:value-of select="'hi there'"/>
>     </xsl:copy>
>   </xsl:template>

xsl:copy makes a shallow copy of a node, and, by definition, a copy is
identical to the original.  Instead, use the xsl:attribute instruction to
create a new attribute with the same name, but with the new value:

  <xsl:template match="@myAtt">
    <xsl:attribute name="myAtt">hi there</xsl:attribute>
  </xsl:template>

Dave


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread