xslt:比较两个列表变量

时间:2013-12-23 06:11:03

标签: xslt

我使用的是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。

3 个答案:

答案 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)