<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxml="urn:schemas-microsoft-com:xslt"
  xmlns:exsl="http://exslt.org/common"
  exclude-result-prefixes="msxml exsl"
  version="1.0">
  
  <xsl:output method="html" indent="yes"/>
  
  <xsl:template match="/">
    <html lang="en">
      <head>
        <title>generate-id test</title>
      </head>
      <body>
        <h1>generate-id test</h1>
        <ul>
          <li>
            <xsl:call-template name="random-id"/>
          </li>
          <li>
            <xsl:call-template name="random-id"/>
          </li>
          <li>
            <xsl:call-template name="random-id"/>
          </li>
        </ul>
      </body>
    </html>
  </xsl:template>

  <xsl:template name="random-id">
    <xsl:variable name="rtf">
      <foo/>
    </xsl:variable>
    <xsl:choose>
      <xsl:when test="function-available('exsl:node-set')">
        <xsl:value-of select="generate-id(exsl:node-set($rtf))"/>
      </xsl:when>
      <xsl:when test="function-available('msxml:node-set')">
        <xsl:value-of select="generate-id(msxml:node-set($rtf))"/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:message terminate="yes">Can't convert result tree fragment to node-set.</xsl:message>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>
