RE: [xsl] Portability function-available tips

Subject: RE: [xsl] 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


Current Thread