题
我想检索集合中的文档,这些文档满足给定元素没有特定子元素的要求。例如,从两个“文件”中,下面,我想选择doc 2,因为它有元素child,但是doc 1,因为它没有。
Doc 1 :
<doc>
<element>
<child/>
</element>
</doc>
文档2 :
<doc>
<element>
<other-child/>
</element>
</doc>
我试过这样做:
for $item in collection('/db/collection')
where not($item//child)
return $item
但是,由于某些原因,这不起作用。我也尝试了 exists
,序列函数等的各种组合,但是无法获得我想要的结果。
为了澄清, not($ item // child)
测试似乎没有按我认为的那样做。上面的查询返回我的集合中的每个文档,它是否具有该元素。
然而,逆向工作:
for $item in collection('/db/collection')
where $item//child
return $item
此查询确切地返回具有子元素的文档。
是什么给出了?
解决方案 2
使用命名空间的xml文档时,似乎是eXist的XQuery引擎(1.2.6)中的一个错误,因为它适用于没有命名空间的文档,以及最新的svn快照。
长号。
其他提示
我认为您需要同时使用not()和exists()来实现所需的结果。所以,我想你想做点什么:
for $item in collection('/db/collection') return
if (not(exists($item//child))) then $item
else ()
关于命名空间问题:如果您的文档使用命名空间,那么您应该在XQuery语句中使用正确的命名空间声明,例如 declare namespace ns =&quot; some_uri&quot ;;
希望这会有所帮助。 结果,-tjw
要解决这个问题,暂时如何:
for $item in collection('/db/collection')
return
if ($item//child) then
$item
else
()
不隶属于 StackOverflow