Re: [xsl] Multiple tranformations of a given element using XSL

Subject: Re: [xsl] Multiple tranformations of a given element using XSL
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Wed, 11 Dec 2002 02:17:41 -0800 (PST)
"Michael Kay" <michael.h.kay@xxxxxxxxxxxx> wrote in message
news:000c01c2a0f7$c5c12150$6401a8c0@xxxxxxxxxx
> >
> > To make it more clear, after I change an element name
> > during the first pass, if I would like to change the
> > content of the element during the second pass, the
> > second template is working on the source tree (which
> > is never modified) and hence the first change is being
> > compromised on the output tree. If there is a way I can make
> > the second template work on the DOM modified by the first
> > template, then I can probably use the new element name in the
> > 'match' variable of the second template.
> >
> > In essence, the first set of templates will modify the
> > DOM during the first pass, the modified DOM will be
> > the source tree for the second set of templates and so
> > on.
> >
>
> Yes, it's perfectly possible to write multi-pass transformations, and
> it's often a good way of keeping your stylesheets well-structured and
> modular, even in cases where a single-pass solution is feasible.
>
> There are two approaches: using multiple transformations with
multiple
> stylesheets, and using a single transformation with multiple phases
> within a single stylesheet.
>
> In the first approach you control the sequence of transformations
from
> the processor's API. This is particularly convenient to do using JAXP
in
> the Java world, but it's not difficult with Microsoft's API either.
>
> In the second approach you need to use a temporary tree and the
> xx:node-set extension. The typical logic is:
>
> <xsl:template match="/">
>   <xsl:variable name="temp">
>     <xsl:apply-templates select="/" mode="phase1"/>
>   </xsl:variable>
>   <xsl:apply-templates select="xx:node-set($temp)" mode="phase2"/>
> </xsl:template>
>
> You can of course implement the two modes (phases) in different
> stylesheet modules if you wish.
>
> Another approach is Saxon's "next-in-chain" extension which allows
one
> stylesheet to nominate another stylesheet that is used to process the
> result tree from the first stylesheet.
>
> Incidentally, it's probably best not to use the term DOM to refer to
> trees in the XPath data model: there are many differences between the
> DOM model and the XPath model. Microsoft blur the distinction by
> implementing both models in one product.
>
> 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
>

The clean way to perform multipass processing is using functional
composition. Do have a look at the article:
"Dynamic Functions using FXSL: Composition, Partial Applications and
Lambda Expressions" at:
http://fxsl.sourceforge.net/articles/PartialApps/Partial%20Applications.html

Also, from a historical perspective, the following might be
interesting:
http://sources.redhat.com/ml/xsl-list/2001-06/msg01147.html





=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL

__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread