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

Subject: Re: [xsl] template match on attribute, copy but change value
From: "Benjamin Farrow" <lovinjess@xxxxxxxxxxx>
Date: Thu, 10 Jul 2003 16:03:58 -0700
Hi again,

Section 7.5 of the Rec says:
When the current node is an attribute, then if it would be an error to use xsl:attribute to create an attribute with the same name as the current node, then it is also an error to use xsl:copy (see [7.1.3 Creating Attributes with xsl:attribute]).


I took this to mean that xsl:copy won't work just as using xsl:attribute with the same name as the current node...however, the below template works (replacing same template from my previous post). When xsl:copy didn't work and I found that definition I didn't initially test this approach...my gut told me to try it anyways after looking around...

 <xsl:template match="@myAtt">
   <xsl:attribute name="myAtt">
     <xsl:value-of select="'hi there'"/>
   </xsl:attribute>
 </xsl:template>


Well, I guess I'm on my way, but if anybody has comments as to this approach, I would more than welcome them.


Thanks,
 Benjamin

From: "Benjamin Farrow" <lovinjess@xxxxxxxxxxx>
Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] template match on attribute, copy but change value
Date: Thu, 10 Jul 2003 15:51:08 -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:template match="node()|@*">
   <xsl:copy>
     <xsl:apply-templates select="node()|@*"/>
   </xsl:copy>
 </xsl:template>

</xsl:stylesheet>

Expected Output:
<test>
 <Element myAtt="hi there">
   <child/>
 </Element>
</test>


Thanks for any comments, Benjamin

_________________________________________________________________
The new MSN 8: smart spam protection and 2 months FREE* http://join.msn.com/?page=features/junkmail



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



_________________________________________________________________
Add photos to your messages with MSN 8. Get 2 months FREE*. http://join.msn.com/?page=features/featuredemail



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



Current Thread