xquery空序列如何处理

时间:2013-11-22 02:31:34

标签: 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"

我得到氧气的结果: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 严重性:警告 描述:您的查询返回一个空序列。

任何人都可以帮助我。在此先感谢。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,我认为问题是你的where子句会过滤掉你正在寻找的值:如果“IN005”不存在那么它将永远不会到达return子句。 / p>

相反,你不应该有一个where子句并在返回中进行检查:

for $family in doc("gedcom.xml") /*/FamilyRec
return if($family/Child/Link[@Ref = "IN005"]) then "NotEmpty" else "Empty"

答案 1 :(得分:0)

  

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

什么是“它”?

我无法确切地知道你的要求是什么,但听起来像是:

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