Xquery 找出离今天最近的日期

Xquery 找出离今天最近的日期,xquery,Xquery,我已定义$today=当前系统日期 目标:找出从今天开始最近的“日期”元素的值,并基于下面的xml获得相应的“每股价格”值。仅供参考,在计算“最近日期”时,日期是过去还是未来并不重要 我该怎么做 我在想 计算今天和每个“日期”值之间的差值 然后为每个“细节”节点添加“差异”作为“细节”的子级 然后按最小的“持续时间”排序 然后提取第一次出现的“每股价格”值 但不知何故,增加一个孩子似乎对我也不起作用 <test_record> <details> <date

我已定义$today=当前系统日期

目标:找出从今天开始最近的“日期”元素的值,并基于下面的xml获得相应的“每股价格”值。仅供参考,在计算“最近日期”时,日期是过去还是未来并不重要

我该怎么做

我在想

  • 计算今天和每个“日期”值之间的差值
  • 然后为每个“细节”节点添加“差异”作为“细节”的子级
  • 然后按最小的“持续时间”排序
  • 然后提取第一次出现的“每股价格”值
  • 但不知何故,增加一个孩子似乎对我也不起作用

    <test_record>
    <details>
        <date>2013-01-16</date>
        <currency>USD</currency>        
        <shares>48</shares>
        <price_per_share>20</price_per_share>
    </details>
    <details>
        <date>2018-05-28</date>
        <currency>USD</currency>
        <shares>49</shares>
        <price_per_share>30</price_per_share>
    </details>
    <details>
        <date>2018-10-25</date>
        <currency>USD</currency>
        <shares>50</shares>
        <price_per_share>40</price_per_share>
    </details>
    <details>
        <date>2018-05-02</date>
        <currency>USD</currency>
        <shares>51</shares>
        <price_per_share>60</price_per_share>
    </details>
    
    
    2013-01-16
    美元
    48
    20
    2018-05-28
    美元
    49
    30
    2018-10-25
    美元
    50
    40
    2018-05-02
    美元
    51
    60
    


    不能使用“映射”,因为我只能使用xquery 1.0。

    您描述的步骤听起来不错,除了第二个步骤。不需要附加任何内容,因为您实际上不想修改节点。事实上,单靠XQuery是无法做到这一点的(XQuery Update是另一个用于此目的的规范)。此外,这里不需要使用地图。您的逻辑听起来像是熟悉过程编程,但函数式编程语言(XQuery就是其中之一)的概念是完全不同的,因此您可能需要熟悉它

    关于您的问题:您首先计算日期和今天日期之间的差异。正如你所说的,不管这是过去还是未来,我们都必须计算持续时间的绝对值。为此,我们首先除以秒,从而得到此持续时间的秒数。由于我们现在有了一个数字,我们可以在
    $abs diff
    中获得绝对值。然后,我们根据该值进行订购,获得序列的第一个元素并返回
    price\u per\u share

    let $today := fn:current-date()
    return (
      for $detail in //details
      let $diff := xs:date($detail/date) - $today
      let $abs-diff := abs($diff div xs:dayTimeDuration('PT1S'))
      order by $abs-diff
      return $detail
    )[1]/price_per_share
    

    谢谢当我在上面尝试时,它给出了以下错误:XQuery静态错误在#…yTimeDuration('PT1S'))顺序中#:未知构造函数:{}dayTimeDuration@user8748135,您使用的是哪个XQuery实现?
    xs:dayTimeDuration
    数据类型及其构造函数应该是任何完整的XQuery 1.0实现的一部分:我使用的是使用saxon8.jar(应该支持XQuery 1.0)的XQuisitor(处理XQuery的独立工具)和xquisitor-1.0a5.jar。@user8748135是否有任何原因让您使用这个看起来非常过时的工具,它似乎自2005年以来就不受支持了。我与XQuery合作了很长一段时间(这是一个小社区),这是我第一次听到这个消息。撒克逊人8号也相当古老。与使用BaseX或exist db相比,我真的看不出使用它有什么好处。