XSLT 2.0 解决方案
分解成一系列标记并使用以下方法进行比较=
:
<xsl:when test="tokenize($style-name,' ') = 'u')">true</xsl:when>
这会将所有以空格分隔的标记转换为一个序列,并且= 'u'
如果任何标记匹配“u”,则将匹配。
XSLT 1.1 解决方案
<xsl:template name="tokenize">
<xsl:param name="token" />
<xsl:param name="text"/>
<xsl:if test="string-length($text)">
<token><xsl:value-of select="substring-before(concat($text,$token),$token)"/></token>
<xsl:call-template name="tokenize">
<xsl:with-param name="text" select="substring-after($text,$token)"/>
<xsl:with-param name="token" select="$token"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
...
<xsl:variable name="tokens">
<xsl:call-template name="tokenize">
<xsl:with-param name="text" select="$style-name"/>
<xsl:with-param name="token" select="' '"/>
</xsl:call-template>
</xsl:variable>
<xsl:when test="$tokens/token = 'u'">true</xsl:when>
XSLT 1.0 解决方案
需要包含在每个主要 XSL 处理器(包括 MSXSL)中的扩展。将此命名空间声明添加到您的样式表:
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
并更改@test:
<xsl:when test="msxsl:node-set($tokens)/token = 'u'">true</xsl:when>
对于 ESLT 感知处理器(Saxon、xsltproc、Xalan-J、jd.xslt 和 4XSLT),使用xmlns:exsl="http://exslt.org/common"
和exsl:node-set()
. 对于 Xalan-C 使用xmlns:xalan="http://xml.apache.org/xalan"
和xalan:nodeset()
.