0

我有一个 Xquery 问题。我的输出 xml 中有一个时间戳元素,只有当它存在时,它才需要从输入 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 中的元素从中获取其值的位置),但输出仍然需要具有相应的元素。

任何帮助都感激不尽!多谢!!!

4

1 回答 1

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(.) }
  } 
于 2013-05-08T19:24:22.320 回答