我有以下Xquery:
let $x := <a>
<i>false</i>
</a>
return
if (every $t in $x/a satisfies $t/i eq "true")
then $x
else <nothing/>
我如何理解这一点,如果所有$x
的{{1}}都有一个单词“true”,则返回<a>
。但是,这总是返回<i>
。
相反,如果我有以下XML文档:
$x
以及以下查询:
<root>
<a><i>false</i></a>
</root>
for $x in /root
return
if (every $t in $x/a satisfies $t/i eq "true" )
then $x
else <nothing/>
包含false时会返回<nothing/>
,<i>
为“true”时会返回$x
我的问题是:
答案 0 :(得分:5)
关键区别在于第二个例子中是否存在分配给$ x的根元素,而不是第一个。
在您的第一个示例中,根元素是<a>
,但在您的量词表达式中,您可以编写every $t in $x/a
。 $x/a
选择a
的子<a>
元素,但没有{仅i
。所以$x/a
评估为空。表达式减少到every $t in () satisfies $t/i eq "true"
。由于空被分配给$t
,因此完整量词表达式的计算结果为真。