我有一个函数,它将返回cts:and-query()
或cts:or-query()
。
如何验证查询是否为空(其中没有任何元素或集合查询)?
我想过滤如下查询
cts:and-query(cts:or-query((), ()), ())
答案 0 :(得分:4)
根据您的定义验证查询是否为空的最可靠方法是递归遍历查询,直到遇到非空查询元素为止;否则,返回true。
首先将查询转换为XML,这样做会容易一些:
declare function local:is-empty-query(
$q as schema-element(cts:query)*
)
{
if (empty($q)) then true()
else if (every $e in $q satisfies ($e/self::cts:and-query or $e/self::cts:or-query))
then local:is-empty-query($q/*)
else false()
};
local:is-empty-query(document { cts:and-query((cts:or-query((), ()))) }/*)
=> true()
local:is-empty(document { cts:and-query((cts:or-query((cts:word-query('test'), ())))) }/*)
=> false()