a) 我可以直接从自动获取布尔值 true|false
字符串“真|假”?
b) 是否有一个 (xpath?) 构造将布尔值 true|false 映射到
'*', '' ?
这实际上是一个XPath问题.
一、XPath 1.0
有多个 XPath 表达式,其计算会产生所需的结果:
substring('*', 2 -(@flag = 'true'))
这也回答了 b)——注意strings 'true'
and 'false'
不是布尔值!仅有的两个布尔值是true()
and false()
而且它们不是字符串。
在上面的表达式中,我们使用了这样一个事实:在 XPath 1.0 中,如果布尔值位于需要数字的上下文中,它会自动转换为数字。根据定义:
number(true())
is 1
and
number(false())
is 0
因此调用的第二个参数substring()
above:
2 - (@flag = 'true')
被评估为1
when @flag = 'true'
and to 2
否则。
生成字符串的更通用的 XPath 1.0 表达式$s1
if $val
is "x"
并产生字符串$s2
if $val
is "y"
:
concat(substring($s1, 1 div ($val = "x")),
substring($s2, 1 div ($val = "y"))
)
这会产生字符串$s1
when $val = "x"
, 字符串$s2
when $val = "y"
,以及空字符串——如果这两个条件都不成立。
上面的 XPath 1.0 表达式可以概括为产生 N 个不同的字符串结果$s1
, $2
, ..., $sN
恰好在什么时候$val
是值之一$v1
, $v2
, ..., $vN
因为函数concat()
可以有任意数量的参数。
二. XPath 2.0 (XSLT 2.0)
'*'[current()/@flag = 'true']
更一般地说,给定 2*N 个原子值$s1
, $s2
, ... $sN
and $v1
, $v2
, ..., $vN
,这样所有的$vi
值不同,计算此 XPath 2.0 表达式的结果:
($s1, $s2, ..., $sN)[index-of(($v1, $v2, ..., $vN), $v)]
is $sK
恰好在什么时候$v eq $vK
.