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

时间:2011-10-11 09:17:40

标签: xml xslt

无论你是否可以在XSLT中test="$var in ('Val1','Val2','Val3')"而不是test="$var='Val1' or $var='Val2' or $var='Val3'"进行操作,

无法在任何地方找到答案?

3 个答案:

答案 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片段中并在其中进行搜索。