Subject: Re: [xsl] Can you apply a template match on a copy node? From: "Mike Carlisle" <swflash@xxxxxxxxxxx> Date: Fri, 20 Sep 2002 20:24:34 +0100 |
Thank you for the replies. Various reasons include having a generic way of styling html with xsl when a transform occurs. ie setting up a match to style a tag that can be defined in once place, and applied to any tags of that type whether in the orginial data, or written out by another match. I guess what it comes down to is this. I want to apply templates to the <td> tag created during the "myNode" match. <xsl:template match="myNode"> <html><body><table> <tr><td><xsl:apply-templates select="???? | @*" /> <xsl:value-of select="text()" /> </td></tr> </table></body></html> </xsl:template> <xsl:template match="td"> <xsl:copy> <xsl:attribute name="width">500</xsl:attribute> <xsl:attribute name="bgcolor">#3300FF</xsl:attribute> </xsl:copy> </xsl:template> <xsl:template match="@style"> <xsl:attribute name="class"><xsl:value-of select="." /></xsl:attribute> </xsl:template> <xsl:template match="@*" > <xsl:copy-of select="." /> </xsl:template> This is the plan: The attributes from myNode are transfered to the TD node written out in the first match, and when the templates are applied again, these copied attributes are processed. This works. <myNode style="selected">blah</myNode> becomes <table><tr><td class="selected">blah</td></tr></table> However I also want to apply templates to <td>, so that it becomes: <table><tr><td class="selected" width="500" bgcolor"#3300FF">blah</td></tr></table> Any ideas? Or would this require a two stage passing process? ----- Original Message ----- From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Thursday, September 19, 2002 3:38 PM Subject: RE: [xsl] Can you apply a template match on a copy node? > > Wonder if anyone can help. I have an xsl which is applying > > templates on match. One of these templates matches on an > > attribute. For various reasons within this template I want to > > copy the node (filtering out the matched attribute), and then > > apply templates to the copy of this node. > > What are the various reasons? > > By "the node", I assume you mean "the element that owns this attribute". > You can do > > <xsl:template match="@x"> > <xsl:variable name="c"> > <xsl:for-each select=".."> > <xsl:copy> > <xsl:copy-of select="@*[local-name()!='x']"/> > <xsl:copy-of select="*"/> > </xsl:copy> > </xsl:for-each> > </xsl:variable> > <xsl:apply-templates select="xx:node-set($c)"/> > </xsl:template> > > But I feel sure there is a more straightforward solution to your real > problem. > > Michael Kay > Software AG > home: Michael.H.Kay@xxxxxxxxxxxx > work: Michael.Kay@xxxxxxxxxxxxxx > > > 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] Can you apply a template , Michael Kay | Thread | Re: [xsl] Can you apply a template , Joerg Heinicke |
RE: [xsl] OT: XML Node-normalizatio, Wendell Piez | Date | Re: [xsl] Muenchian method on nodes, J.Pietschmann |
Month |