无法在任何地方找到答案是否可以在 XSLT 中执行 test="$var in ('Val1','Val2','Val3')"
而不是执行 test ="$var='Val1' 或 $var='Val2' 或 $var='Val3'"
?
最佳答案
在 XSLT 1.0 中,您可以使用 contains()
功能:
test(contains('Val1,Val2,Val3',$var))`
它返回一个 bool 结果,测试第一个字符串是否包含第二个字符串。
帮助减少部分字符串匹配的误报结果的常用方法是使用定界符并用该定界符填充值:
test="contains(' Val1 Val2 Val3 ', concat(' ',$var,' '))
这样,如果 $var
的值为“Val
”,只有在将“Val
”添加到正在测试的值列表。
在 XSLT 2.0 中,您可以使用:
test="$var = ('Val1','Val2','Val3')"
如果 $var
等于序列中的任何项目(当括号内有逗号分隔的值列表时定义的内容),它将返回 true。
另一个 XSLT 2.0 解决方案:
test="some $value in ('Val1','Val2','Val3') satisfies $var=$value"
关于xml - xslt 测试 bool 表达式中的 IN 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7723797/