Michael says:
As explained in my previous reply, XSLT 1.0 does not allow sequences of atomic tokens, so I'm puzzled what you mean by this one.
 
This code adds an asterisk after each word in a space delimited string.
 
Xalan code:
<xsl:variable name="tokens" select="str:tokenize($search2,' ')"/>
<xsl:for-each select="$tokens">
 <xsl:choose>
  <xsl:when test="substring(text(),string-length(text()),1) = '*'">
   <xsl:value-of select="text()"/>                   
  </xsl:when>
  <xsl:otherwise>
   <xsl:value-of select="text()"/><xsl:text>* </xsl:text>       
  </xsl:otherwise>
 </xsl:choose>
</xsl:for-each> 
           

changed to:

<xsl:variable name="current" select="."/>
<xsl:variable name="tokens" select="tokenize($search2,' ')"/>
<xsl:for-each select="$tokens">
 <xsl:choose>
  <xsl:when test="substring($current/text(),string-length($current/text()),1) = '*'">
   <xsl:value-of select="$current/text()"/>                   
  </xsl:when>
  <xsl:otherwise>
   <xsl:value-of select="$current/text()"/><xsl:text>* </xsl:text>       
  </xsl:otherwise>
 </xsl:choose>
</xsl:for-each> 
           
 
Michael says:
There's no change here between XSLT 1.0 and XSLT 2.0. Two global parameters can have the same name if and only if they have different import precedence.
 
According to spec, yes.  Evidently XALAN is forgiving about this requirement when including a file instead of importing.  The easy fix is to change <xsl:include/> into <xsl:import/>.