Xquery,检查序列成员资格

Xquery,检查序列成员资格,xquery,sequence,Xquery,Sequence,指向: [1.0-ml] XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected In_, expecting Comma_ or Rpar_ or SemiColon_ 这里的正确语法是什么?应该使用=运算符 where ($d/Id/text() in $s) let$s:=('foo','bar') 收款中的$d('mycollection') 其中$d/Id/text()=$s 返回{$d/N

指向:

[1.0-ml] XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected In_, expecting Comma_ or Rpar_ or SemiColon_

这里的正确语法是什么?

应该使用
=
运算符

where ($d/Id/text() in $s)
let$s:=('foo','bar')
收款中的$d('mycollection')
其中$d/Id/text()=$s
返回{$d/Name}({$d/Id})


text()
看作字符串的等价物不是一个好习惯。它们不是字符串,它们是原子化为字符串的节点。同样地对待它们会导致微妙的、难以诊断的错误。更好的表述是:

let $s := ('foo', 'bar')

for $d in collection('mycollection')
where $d/Id/text() = $s
return <p>{$d/Name} ({$d/Id})</p> 
这不仅更简单、更具表现力,像MarkLogic这样的处理器还可以将
集合('mycollection')[Id=$s]
转换为高效的
xdml:element-value查询。使用
where
表单可能导致对集合中的每个文档进行暴力检查

let $s := ('foo', 'bar')

for $d in collection('mycollection')
where $d/Id/text() = $s
return <p>{$d/Name} ({$d/Id})</p> 
let $s := ('foo', 'bar')

for $d in collection('mycollection')
where $d/Id/fn:string() = $s
return <p>{$d/Name} ({$d/Id})</p> 
let $s := ('foo', 'bar')

for $d in collection('mycollection')
where $d/Id = $s
return <p>{$d/Name} ({$d/Id})</p> 
let $s := ('foo', 'bar')

for $d in collection('mycollection')[Id = $s]
return <p>{$d/Name} ({$d/Id})</p>