Xml xslt测试布尔表达式中的IN函数

Xml xslt测试布尔表达式中的IN函数,xml,xslt,Xml,Xslt,无论您是否可以在XSLT中执行test=“$var-in('Val1','Val2','Val3')”,而不是执行test=“$var='Val1'或$var='Val2'或$var='Val3'”?XSLT/XPath不支持in表达式 但是您可以将这些值存储到XML片段中并在其中搜索。在XSLT1.0中,您可以使用以下函数: test(contains('Val1,Val2,Val3',$var))` 它返回一个布尔结果,测试第一个字符串是否包含第二个字符串 帮助减少部分字符串匹配的误报结果

无论您是否可以在XSLT中执行
test=“$var-in('Val1','Val2','Val3')”
,而不是执行
test=“$var='Val1'或$var='Val2'或$var='Val3'”

XSLT/XPath不支持in表达式


但是您可以将这些值存储到XML片段中并在其中搜索。

在XSLT1.0中,您可以使用以下函数:

test(contains('Val1,Val2,Val3',$var))`
它返回一个布尔结果,测试第一个字符串是否包含第二个字符串

帮助减少部分字符串匹配的误报结果的常见方法是使用分隔符并用该分隔符填充值:

test="contains(' Val1 Val2 Val3 ', concat(' ',$var,' '))
这样,如果
$var
的值为“
Val
”,则只有将“
Val
”添加到测试值列表中时,才会返回true

在XSLT2.0中,可以使用:

test="$var = ('Val1','Val2','Val3')"
test="some $value in ('Val1','Val2','Val3') satisfies $var=$value"
如果
$var
等于序列中的任何项(这是在括号内有逗号分隔的值列表时定义的),则返回true

另一个XSLT2.0解决方案:

test="$var = ('Val1','Val2','Val3')"
test="some $value in ('Val1','Val2','Val3') satisfies $var=$value"

I.XPath 1.0/XSLT 1.0

$var = ('Val1', 'Val2', 'Val3')
使用

contains(concat($Sep, 'Val1', $Sep, 'Val2', $Sep, 'Val3', $Sep),
         concat($Sep, $var, $Sep)
        )
$var = /a/b
其中,
$Sep
是保证不会出现在任何值中的字符串

当一个或多个值以
$var
值开头或结尾时,串联是排除误报的必要条件

如果
'Val1'
'Val2'
'Val3'
是文本节点(比如
/a/b
),比较就更容易了。

contains(concat($Sep, 'Val1', $Sep, 'Val2', $Sep, 'Val3', $Sep),
         concat($Sep, $var, $Sep)
        )
$var = /a/b
II。XPath 2.0(XSLT 2.0)