RE: [xsl] Portability function-available tips

Subject: RE: [xsl] Portability function-available tips
From: "Andrew Welch" <AWelch@xxxxxxxxxxxxxxx>
Date: Fri, 9 Jan 2004 09:50:43 -0000
> > Dimitre has a version of msxml that supports exsl,
> > alternatively I believe you can put in an msxsl script 
> > element that will be ignored by other processors but which 
> > implements exsl:node-set (essentially just needs to be an 
> > identity function)
> > 
> > David
> 
> Ahhh excellent - exactly the kind of thing I was looking for, 
> thanks David

Hmmm, maybe it wasn't :)

Or at least, I can't see how to take advantage of it.

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


Current Thread