给出2 xml文件,其中包含每个文件中的数字列表。
<list1>
<item>1</item>
<item>2</item>
...
</list1>
list1 = [1,2,3,4,5,7,8,9,10]
list2 = [1,4,6,2,8]
我只希望list1中的数字大于list2中的所有数字,我该怎么做?
我尝试了这个,但只有当它大于list2中的数字而不是整个列表时才会返回该数字。
for $x in doc("list1.xml")/item
for $y in doc("list2.xml")/item
where ($x > $y)
return $x
先谢谢,xquery中的新手。
答案 0 :(得分:2)
使用XQuery 3.0,你可以使用fn:for-each
,这在我看来是更好的语法。因此,对于$list1
中的每个项目,它会检查$list2
中的项目是否更大。
let $list1 := (1 to 10)
let $list2 := (1, 4, 6, 2, 8)
return for-each($list1, function($l) {
if (for-each($list2, function($x) {$l > $x}) = false())
then ()
else $l
})
如果您只有XQuery 1.0,这应该也可以,并且基本相同:
let $list1 := (1 to 10)
let $list2 := (1, 4, 6, 2, 8)
for $l in $list1
where not((
for $f in $list2
return $l > $f
) = false())
return $l
答案 1 :(得分:0)
也许我误解了这个问题,但在我看来,使用一个不需要任何显式循环的单个谓词有一个更简单,更有效的解决方案:
xquery version "1.0";
let $list1 := (1, 2, 3, 4, 5, 7, 8, 9, 10)
let $list2 := (1, 4, 6, 2, 8)
let $max2 := max($list2)
return
$list1[. gt $max2]
我还要向@ ou-ye清楚地说明一下XQuery术语。目前在XQuery中没有List结构,最接近的是使用(
和)
构建的Sequence。