This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Creating nodes for the source versus the results tree.
use EXSLT this will ensure a bit of interoperability
www.exslt.org
cheers, jim fuller
----- Original Message -----
From: "Edward L. Knoll" <ed.knoll@cosd.fedex.com>
To: "Jeni Tennison" <jeni@jenitennison.com>
Cc: <XSL-List@lists.mulberrytech.com>
Sent: Monday, July 08, 2002 8:13 PM
Subject: Re: [xsl] Creating nodes for the source versus the results tree.
> 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
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list