Re: [xsl] Recursive substitution

Subject: Re: [xsl] Recursive substitution
From: Wendell Piez <wapiez@xxxxxxxxxxxxxxxx>
Date: Fri, 04 Nov 2005 15:54:09 -0500
Anupam,

At 02:55 PM 11/4/2005, you wrote:
<xsl:template match="ref[@name]">
        <xsl:variable name="x">
            <xsl:copy-of select="//define[@name=current()/@name]/*"/>
        </xsl:variable>
        <xsl:apply-templates select="$x"/>
</xsl:template>

When you say this you are asking the processor to build a temporary tree containing copies of the 'define' elements you want, and then traverse them matching with templates.


But the temporary tree you have created does not include any 'define' elements for references that appear inside it (unless there happen to be circular references, in which case you're in trouble anyway).

Accordingly, the processor does not find those nodes to process and does not process them.

Solve your problem by creating a copy and processing it, but by continuing to apply templates to nodes in the original tree:

<xsl:template match="ref[@name]">
  <xsl:apply-templates select="//define[@name=current()/@name]/*"/>
</xsl:template>

And watch out for those endless loops!

Good luck,
Wendell


====================================================================== Wendell Piez mailto:wapiez@xxxxxxxxxxxxxxxx Mulberry Technologies, Inc. http://www.mulberrytech.com 17 West Jefferson Street Direct Phone: 301/315-9635 Suite 207 Phone: 301/315-9631 Rockville, MD 20850 Fax: 301/315-8285 ---------------------------------------------------------------------- Mulberry Technologies: A Consultancy Specializing in SGML and XML ======================================================================

Current Thread