Subject: Re: [xsl] Can you apply a template match on a copy node? From: "Mike Carlisle" <swflash@xxxxxxxxxxx> Date: Sun, 22 Sep 2002 13:39:03 +0100 |
Hi Joerg, The reason for wanting to process <td> in a seperate match was that it could be used to define a style for <td> in one place, and one place only. Whether the <td> was in the xml or written by another match I wanted one place where it's attributes could be set generically, a bit like using xsl as a css. I'm not that familar with extensions used in Michael Kay's approach. Am I right in thinking that to use node-set I need to install something like Xalan.exe, and this will then pass a string back into a node set? How do these extensions effect efficiency of the tranform? I've been told xsl/xml transforms are already fairly processor intensive compared to something like a pure asp solution, so am a bit reluctent to start complicating the process further with external calls. Dooes anyone know of or have any good bench marks? Cheers, Mike ----- Original Message ----- From: "Joerg Heinicke" <joerg.heinicke@xxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Sunday, September 22, 2002 12:29 AM Subject: Re: [xsl] Can you apply a template match on a copy node? > Hello Mike, > > yes this sound like a 2-step processing, if you want to do it exactly in > the way you described it. But you can also use Michael Kay's approach. > In general you can't access the created output and if you store the > output in a variable like in Michael's example you have to use extension > function. > > In my opinion both is not needed. Why you need the step with <td>?? Your > code would also add the needed attributes to the output. And @width and > @bgcolor you can add in the template matching on myNode: > > > <xsl:template match="myNode"> > > <html><body><table> > > <tr> > <td width="500" bgcolor="#3300FF"> > <xsl:apply-templates select="@*" /> > <xsl:value-of select="text()" /> > > </td> > </tr> > > </table></body></html> > > </xsl:template> > > Or do you see any problem with this approach? > > Regards, > > Joerg > > > Mike Carlisle wrote: > > 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 > > > 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 , Joerg Heinicke | Thread | RE: [xsl] Can you apply a template , James Fuller |
Re: [xsl] Match values? (sorry so b, Joerg Heinicke | Date | RE: [xsl] Can you apply a template , James Fuller |
Month |