test="$var in ('Val1','Val2','Val3')"
而不是test="$var='Val1' or $var='Val2' or $var='Val3'"
进行操作,无法在任何地方找到答案?
答案 0 :(得分:2)
在XSLT 1.0中,您可以使用contains()
函数:
test(contains('Val1,Val2,Val3',$var))`
它返回一个布尔结果,测试第一个字符串是否包含第二个字符串。
帮助减少部分字符串匹配的误报结果的常用方法是使用分隔符并使用该分隔符填充值:
test="contains(' Val1 Val2 Val3 ', concat(' ',$var,' '))
这样,如果$var
的值为“Val
”,则只有将“Val
”添加到要测试的值列表中才会返回true。
在XSLT 2.0中,您可以使用:
test="$var = ('Val1','Val2','Val3')"
如果$var
等于序列中的任何项目(当您在括号内有逗号分隔的值列表时定义的内容),它将返回true。
另一个XSLT 2.0解决方案:
test="some $value in ('Val1','Val2','Val3') satisfies $var=$value"
答案 1 :(得分:1)
<强>予。 XPath 1.0 / XSLT 1.0
使用强>:
contains(concat($Sep, 'Val1', $Sep, 'Val2', $Sep, 'Val3', $Sep),
concat($Sep, $var, $Sep)
)
其中$Sep
是一个保证不会出现在任何值中的字符串。
当一个或多个值以$var
的值开头或结束时排除误报是必要的。
如果'Val1'
,'Val2'
和'Val3'
是文字节点(比如/a/b
),则比较会更容易:
$var = /a/b
<强> II。 XPath 2.0(XSLT 2.0)
$var = ('Val1', 'Val2', 'Val3')
答案 2 :(得分:0)
XSLT / XPath不支持IN表达式。
但您可以将这些值存储到XML片段中并在其中进行搜索。