XQuery检查空元素,如果元素为空则返回默认值

时间:2013-05-08 19:15:48

标签: timestamp xquery

我有一个Xquery问题。我的输出xml中有一个timestamp元素,只有当它存在时才需要从输入xml获取一个元素的值,否则它应该返回一个默认值。我如何做到这一点:

例如,我的输入xml如下所示:

<test>
    <timestamp1>2014-12-31T12:00:00.285Z</timestamp1>
    <timestamp2></timestamp2>
</test>

我需要编写一个xquery来返回以下xml:

<response>
    <time1>2014-12-31T12:00:00.285Z</time1>
    <time2>2038-01-02T00:00:00.285Z</time2>
    <time3>2038-01-02T00:00:00.285Z</time3>
</response>

请注意,我的输出xml应该包含所有三个时间元素,并且没有一个可以为空。虽然我的输入xml不包含元素(这可能是我的输出xml中的元素从中获取其值的位置),但输出仍然需要具有相应的元素。

任何帮助将不胜感激!非常感谢!!!

1 个答案:

答案 0 :(得分:1)

如果timestampX元素为空,则默认为输出中的时间:

declare function local:first-or-default(
  $time as xs:dateTime
) as xs:dateTime
{
  (., xs:dateTime('2038-01-02T00:00:00.285Z'))[1] 
};

let $test := 
  <test>
      <timestamp1>2014-12-31T12:00:00.285Z</timestamp1>
      <timestamp2></timestamp2>
  </test>

return 
  element response {
    $test/timestamp1/element time1 { local:first-or-default(.) }
    $test/timestamp2/element time2 { local:first-or-default(.) }
    $test/timestamp3/element time3 { local:first-or-default(.) }
  }