Subject: RE: [xsl] template match on attribute, copy but change value From: "Michael Kay" <mhk@xxxxxxxxx> Date: Fri, 11 Jul 2003 09:46:19 +0100 |
> 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... On the contrary, it is saying that if the the current node is an attribute called X, then <xsl:copy/> does exactly the same as <xsl:attribute name="X"><xsl:value-of select="."/></xsl:attribute>, and that if <xsl:attribute name="X">... would cause an error, then <xsl:copy/> will cause an error too. But you are on the right lines. xsl:copy should be used only for making an exact copy of an attribute. If you want to change anything (e.g. the name or the value) then you should use xsl:attribute to create a new attribute instead. Michael Kay 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 > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] template match on attribu, David Carlisle | Thread | [xsl] exslt date-time, I-Lin Kuo |
Re: [xsl] output html source, Keith Anderson | Date | RE: [xsl] output html source, Jim Fuller |
Month |