我试过 myfn:getexpval()
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exslt="http://exslt.org/common"
xmlns:myfn="http://whatever"
xmlns:functx="http://www.functx.com">
<xsl:function name="myfn:getexpval">
<xsl:param name="exp"/>
<xsl:value-of select="if (matches($exp, $openp) != ()) then
myfn:clget-simple-expval(concat(substring-before($exp, $openp),
myfn:clfoundopen(substring-after($exp, $openp))))
else myfn:clget-simple-expval($exp)
"/>
</xsl:function>
<xsl:function name="myfn:clfoundopen">
<xsl:param name="openexp"/>
<xsl:value-of select="if (matches($openexp, $openp) != () and
functx:index-of-string-first($openexp, $openp) < functx:index-of-string-first($openexp, $closep)
) then
myfn:clget-simple-expval(concat(substring-before($openexp, $openp),
myfn:clfoundopen(substring-after($openexp, $openp))))
else
myfn:clget-simple-expval(concat(substring-before($openexp, $closep),
myfn:clfoundopen(substring-after($openexp, $closep))))
"/>
</xsl:function>
<xsl:function name="myfn:clget-simple-expval">
<xsl:param name="exp"/>
<xsl:variable name="ztokens" select="tokenize($exp, 'or')"/>
<xsl:variable name="forret">
<xsl:value-of select="some $i in $ztokens satisfies
myfn:cland($i) = true()"/>
</xsl:variable>
<xsl:value-of select="if ($forret = true())
then
1
else
0"/>
</xsl:function>
<xsl:function name="myfn:cland">
<xsl:param name="exp"/>
<xsl:variable name="ztokens" select="tokenize($exp, 'and')"/>
<xsl:variable name="forret">
<xsl:value-of select="every $i in $ztokens satisfies
replace($i, ' ', '') eq '1'"/>
</xsl:variable>
<xsl:value-of select="$forret"/>
</xsl:function>
<xsl:value-of select="myfn:getexpval('0 or ( 1 and 1 )')"/>
</xsl:stylesheet>