|
Subject: Re: Recursive Templates From: Tony Graham <tgraham@xxxxxxxxxxxxxxxx> Date: Sun, 1 Aug 1999 17:04:24 -0400 (EST) |
At 2 Aug 1999 03:12 +1000, Michael Stillwell wrote:
> I've just started using XSL and am wondering how to achieve the
> transformation such as the following. I want to transform
>
> <section>Introduction</section>
>
> into (say)
>
> <caps><strong>Introduction</strong></caps>
<xsl:template match="section">
<caps>
<strong>
<xsl:apply-templates/>
</strong>
</caps>
</xsl:template>
> My first attempt used templates like
>
> <xsl:template match="emph" name="emph">
> <strong>
> <xsl:apply-templates/>
> </strong>
> </xsl:template>
>
> <xsl:template match="section">
> <caps>
> <emph>
> <xsl:apply-templates/>
> </emph>
> </caps>
> </xsl:template>
>
> Unfortunately, the <emph> ... </emph> tags produced but the "section"
> template are not transformed into <strong> ... </strong> tags. I
> more or less understand why this is, but the best set of templates I
> have found that do what I want are
You appear to be confusing the source tree and the result tree. When
it's time to process a particular node in the source tree, the XSL
processor finds the xsl:template with the best matching "match"
attribute and uses the body of that xsl:template to add (or not add)
nodes to the result tree. The <emph> in your xsl:template is added to
the result tree, and that's all that happens to it. It doesn't get
any templates applied to it.
> <xsl:template match="emph" name="emph">
> <strong>
> <xsl:copy-of select="$content"/>
> </strong>
> </xsl:template>
>
> <xsl:template match="section">
> <caps>
> <xsl:call-template name="emph">
> <xsl:with-param name="content">
> <xsl:apply-templates/>
> </xsl:with-param>
> </xsl:call-template>
> </caps>
> </xsl:template>
>
> I cannot help but think there is a better way.
There are many better ways. I gave a version earlier with a single
xsl:template. If you really want to do it with multiple xsl:template
elements, try:
<xsl:template match="emph" name="emph">
<strong>
<xsl:apply-templates/>
</strong>
</xsl:template>
<xsl:template match="section">
<caps>
<xsl:call-template name="emph"/>
</caps>
</xsl:template>
Regards,
Tony Graham
======================================================================
Tony Graham mailto:tgraham@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc. http://www.mulberrytech.com
17 West Jefferson Street Direct Phone: 301/315-9632
Suite 207 Phone: 301/315-9631
Rockville, MD 20850 Fax: 301/315-8285
----------------------------------------------------------------------
Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: Recursive Templates, David Carlisle | Thread | Re: Recursive Templates, Michael Stillwell |
| Re: Recursive Templates, David Carlisle | Date | Re: Recursive Templates, Michael Stillwell |
| Month |