首页 > 解决方案 > 如何检查我的 cts:and-query 或 cts:or-query 是否包含任何元素查询

问题描述

我有一个函数将返回cts:and-query()or cts:or-query()

如何验证查询是否为空(其中没有任何元素或集合查询)?

我想过滤如下查询

cts:and-query(cts:or-query((), ()), ())

标签: xquerymarklogicmarklogic-9

解决方案


根据您的定义验证查询是否为空的最可靠方法是递归遍历查询,直到遇到非空查询元素,否则返回 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()

推荐阅读