我使用的是saxon 9.0,xslt版本2.
如果两个列表中至少有一个项目是comman,则输出应为1,否则输出应为0.
<xsl:variable name="var_1" select="tokenize("apple mango grape" ' ')"/>
<xsl:variable name="var_2" select="tokenize("cat cow dog", ' ')"/>
<xsl:choose>
<xsl:when test="$var_1 in $var_2">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
示例1:
var_1 ='apple','mango','grape'
var_2 ='apple','cat'
预期结果:1
示例2:
var_1 ='apple','mango','grape'
var_2 ='app','man'
预期结果:0
示例3:
var_1 ='apple','mango','grape'
var_2 ='grape','apple','mango'
预期结果:1
任何人帮助我获得这些预期的结果。
由于 SRB。
答案 0 :(得分:0)
我要解决的方法是将其中一个变量分解为一个列表,然后使用contains
在另一个列表中查找。
然后检查contain
的结果列表以查看它是否“包含”true
个案,如果有,则返回true
,如果是false
则返回 <xsl:for-each select="tokenize("apple mango grape" ' ')>
<xsl:if test="contains(text(), 'apple cow dog')">
1
</xsl:if>
</xsl:for-each>
不
所以它会是这样的:
apple cow dog
缺点,单词app也可以在字符串~
中找到,所以我建议你用~app~
或类似的方式包装你的单词,这样你也可以寻找app
而不是{{1}} {1}}。
答案 1 :(得分:0)
您的语法无效,否则将按预期工作:
<xsl:variable name="var_1" select="tokenize('apple mango grape', ' ')"/>
<xsl:variable name="var_2" select="tokenize('cat cow dog', ' ')"/>
<xsl:template match="/">
<result>
<xsl:choose>
<xsl:when test="$var_1 = $var_2">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</result>
</xsl:template>
返回:
<?xml version="1.0" encoding="utf-8"?>
<result>0</result>
,同时:
<xsl:variable name="var_1" select="tokenize('apple mango grape', ' ')"/>
<xsl:variable name="var_2" select="tokenize('cat cow mango dog', ' ')"/>
<xsl:template match="/">
<result>
<xsl:choose>
<xsl:when test="$var_1 = $var_2">
<xsl:value-of select="1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</result>
</xsl:template>
返回:
<?xml version="1.0" encoding="utf-8"?>
<result>1</result>
答案 2 :(得分:0)
如果两个列表中至少有一个项目是comman,则输出应为1,否则输出应为0.
这与XPath“=”运算符完全相同。
只是
xs:integer($var1 = $var2)