Subject: RE: Portability function-available tips
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Fri, 9 Jan 2004 10:17:59 -0000
|
Two other suggestions for how to tackle this:
(a) put the processor-dependent code in an external XML entity, and use
an EntityResolver to bring in the right version of the external entity
at stylesheet compile-time.
(b) write a processor-dependent stylesheet overlay that imports the main
logic of the stylesheet and overrides the processor-specific parts (for
example, the global variable "foo" in your example below). Use this
overlay as the nominated stylesheet for your transformation.
Michael Kay
>
> As an example, I currently build a temporary tree and convert it to a
> node-set:
>
> <xsl:variable name="foo-rtf">
> <xsl:apply-templates mode="build"/>
> </xsl:variable>
> <xsl:variable name="foo" select="exsl:node-set($foo-rtf)"/>
>
> I then use that variable in several places by using:
>
> <xsl:for-each select="$foo">
> <xsl:apply-templates/>
> </xsl:for-each>
>
> The only way I can see of making the stylesheet portable is
> to replace all occurances of the above for-each, with this
> choose/when:
>
> <xsl:choose>
> <xsl:when test="function-available(msxml:node-set)">
> <xsl:for-each select="msxml:node-set($foo-rtf)">
> <xsl:call-template name="foo-template"/>
> </xsl:for-each>
> </xsl:when>
> <xsl:when test="function-available(exsl:node-set)">
> <xsl:for-each select="exsl:node-set($foo-rtf)">
> <xsl:call-template name="foo-template"/>
> </xsl:for-each>
> </xsl:when>
> <xsl:otherwise>
> <xsl:call-template name="error"/>
> </xsl:otherwise>
> </xsl:choose>
>
> Not only that, but to avoid code duplication I need to
> separate out the body of the for-each into a named template -
> which is even more code.
>
> How can I integrate the msxml:script idea to avoid using
> function-available?
>
> (ps is this the way that everyone keeps there stylesheet portable?)
>
> cheers
> andrew
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|