Re: [xsl] Creating nodes for the source versus the results tree.

Subject: Re: [xsl] Creating nodes for the source versus the results tree.
From: "Edward L. Knoll" <ed.knoll@xxxxxxxxxxxxxx>
Date: Mon, 08 Jul 2002 13:13:59 -0600
I'm somewhat adverse to a specific product coupling, since it means the
stylesheets might not be generically consumable if we want/have to switch
to a different XSLT processor.   I'm also a bit leary about vendor
specific extensions with respect to the next generate of XSL.  I was all
set to take advantage of some XSL 1.1 features of a specific processor
when I learned that XSL 1.1 had been abandoned and those features were to
be handled very differently in XSL 2.0.

With that long-winded preamble, is utilizing this kind of "nodeset()"
extentsion function type of approach  likely to be
consistent/compatible/portable moving forward into the next generation of
XSL?

Thanks for help,
Ed

> Hi Ed,
>
> > I know this is something I could do in a two pass process: during
> > pass1 process of the original/source XML to create the
> > intermediate/temporary XML elements, during pass2 process both the
> > original XML and generated XML elements to create the final output.
> > I'd rather do this in a single pass; is this possible?
>
> Only using an extension function. You can store the result of the
> first pass in a variable, but it's stored as a result tree fragment,
> which means that you can't go on to process it further without turning
> it into a node set. You can turn it into a node set with extension
> functions; most processors have them...
>
> > Two other notes/constraints: (1) I'm using the XalanC++ processor,
>
> ... and in Xalan-C++ it's called nodeset(), in the namespace
> http://xml.apache.org/xalan. So do something like:
>
> <xsl:stylesheet version="1.0"
>                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>                 xmlns:xalan="http://xml.apache.org/xalan";
>                 extension-element-prefixes="xalan">
>
> <xsl:template match="/">
>   <xsl:variable name="pass1-rtf">
>     <xsl:apply-templates mode="pass1" />
>   </xsl:variable>
>   <xsl:apply-templates select="xalan:nodeset($pass1-rtf)"
>                        mode="pass2" />
> </xsl:template>
>
> ...
>
> </xsl:stylesheet>
>
> with templates in 'pass1' mode for your first pass and in 'pass2' mode
> for your second pass.


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


Current Thread