[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Can you apply a template match on a copy node?

Subject: Re: Can you apply a template match on a copy node?
From: "Mike Carlisle" <swflash@xxxxxxxxxxx>
Date: Fri, 20 Sep 2002 20:24:34 +0100
xsl copy node
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:  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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.