【问题标题】:xquery empty sequence how to handlexquery空序列如何处理
【发布时间】:2013-11-22 02:31:34
【问题描述】:

如果它是空序列,我试图返回“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"

然后它应该打印:空

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

引擎名称:Saxon-EE XQuery 9.3.0.5 严重性:警告 说明:您的查询返回了一个空序列。

谁能帮帮我。提前致谢。

【问题讨论】:

  • 将 data() 函数应用于具有(潜在)子元素的元素似乎相当可疑。 “空”到底是什么意思?

标签: xquery saxon


【解决方案1】:

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

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

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

【讨论】:

  • 如果 FamilyRec 出现不止一个(比如 3 个),它将打印 NotEmpty NotEmpty NotEmpty ... 可以一个 NotEmpty 吗?
【解决方案2】:

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

什么是“它”?

我无法准确确定您的要求,但在我看来是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 2020-11-04
    相关资源
    最近更新 更多