xquery空序列如何处理

xquery空序列如何处理,xquery,saxon,Xquery,Saxon,如果是空序列,我尝试返回“Empty”,如果不是,则返回“NotEmpty”。比方说 for $family in doc("gedcom.xml") /*/FamilyRec where $family/Child/Link[@Ref = "IN006"] return if(empty(data($family))) then "Empty" else "NotEmpty" 我在氧气中得到结果:不空 没关系 但比方说,IN005没有任何价值 for $family in doc("gedc

如果是空序列,我尝试返回“Empty”,如果不是,则返回“NotEmpty”。比方说

for $family in doc("gedcom.xml") /*/FamilyRec
where $family/Child/Link[@Ref = "IN006"]
return if(empty(data($family))) then "Empty" else "NotEmpty"
我在氧气中得到结果:不空 没关系

但比方说,IN005没有任何价值

for $family in doc("gedcom.xml") /*/FamilyRec
where $family/Child/Link[@Ref = "IN005"]
return if(empty(data($family))) then "Empty" else "NotEmpty"
然后它应该打印:空

但我得到的不是打印“空”

引擎名称:Saxon EE XQuery 9.3.0.5 严重性:警告 描述:查询返回的序列为空


谁能帮帮我吗。提前感谢。

如果我正确理解了这个问题,我认为问题在于where子句将过滤掉您要查找的值:如果“IN005”不存在,那么它将永远不会到达return子句

相反,您不应该使用where子句并在返回中进行检查:

for $family in doc("gedcom.xml") /*/FamilyRec
return if($family/Child/Link[@Ref = "IN005"]) then "NotEmpty" else "Empty"
如果是空序列,我尝试返回“Empty”,如果不是,则返回“NotEmpty”

什么是“它”

我很难准确了解您的要求,但我觉得:

let $result :=
   for ...
   where ...
   return ...
return (if empty($result) then "Empty" else "Not Empty")

如果FamilyRec有多个事件(ley说3),它将打印NotEmpty NotEmpty NotEmpty。。。对具有(潜在)子元素的元素应用data()函数似乎相当可疑。你说的“空”到底是什么意思?