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

Applying a named template to arbitrary content

Subject: Applying a named template to arbitrary content
From: Iain Huxley <iain@xxxxxxxxxxxxx>
Date: Sun, 12 Mar 2000 21:22:06 -0800
templating calling content
Hi --

I've spent a fair while searching for a solution to a seemingly simple problem, perhaps someone could help me out...

I'm trying to make a generic template which will, in effect, simply insert stuff before and after the content. In one case, I want to do it to apply font styling parameters etc. where needed:

e.g.
    ...
    <font size="4" color="#ffffff">
      <b>
        ...content...
      </b>
    </font>
    ..

The catch is that I want the content to be arbitrary - sometimes it would simply be <xsl:apply-templates/>, sometimes it might be a call to another named template, or it might be a series of elements and text.

The closest I've got is by always calling <xsl:apply-templates/> within the template

e.g.

<xsl:template name="FontAppearance">
    <font size="4" color="#ffffff">
      <b>
        <xsl:apply-templates/>
      </b>
    </font>
</xsl:template>

usage:
<xsl:call-template name="FontAppearance"/>

however, this isn't great since I want to be able to apply the style to anything, such as a call to a named template.

In order to solve this, I tried assigning the desired content to a variable, and passing that to the template. (I initally tried putting the content directly into the param and using <xsl:value-of select="$content"> in the named template, I'm not sure if this should be possible).

e.g.

<xsl:template name="FontAppearance">
  <xsl:param name="content">
    <font size="4" color="#ffffff">
      <b>
        <xsl:copy-of select="$content"/>
      </b>
    </font>
</xsl:template>

usage:
  <xsl:variable name="foo">
    <!-- content example - call index template -->
    <xsl:call-template name="Index"/>
  </xsl:variable>
  <xsl:call-template name="FontAppearance">
    <xsl:param name="content">
     <xsl:value-of select="$foo">
    </xsl:param>
  </xsl:call-template>

However, this doesn't work, and it's very clunky considering how regularly I want to use it in my stylesheet anyway.

Here are some examples of how I'd ideally like to use it:

  <xsl:call-template name="FontAppearance_Body1">
    <!-- following would be inserted into the FontAppearance template -->
    <xsl:call-template name="Index"/>
  </xsl:call-template>

  <xsl:call-template name="FontAppearance_Heading1">
   <xsl:value-of select="Title"/>
  </xsl:call-template>

  <xsl:call-template name="FontAppearance_Body2">
   <xsl:apply-templates select="Sections"/>
  </xsl:call-template>


My basic question is - what's the closest I can get to the above usage? Perhaps I've missed something obvious, it seems like it should be more straightforward to do what I want.


Thanks in advance,

Iain.


//---------------------------------------------------- // Iain Huxley // President // Mindspike Technologies // http://mindspike.com // Ph: (510) 339 7789 //----------------------------------------------------


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.