【问题标题】:Count cases in xpath where date is in last six months计算 xpath 中日期在过去六个月内的案例
【发布时间】:2017-10-31 14:02:58
【问题描述】:

我进行了搜索,但很难找到我理解/可以使用的答案。基本上,我需要使用 xpath 在某些情况下将日期与今天进行比较。

我正在查询的 xml 块包含多个帐户记录,下面是一个块的摘录示例以及相关数据:

<acc>
  <default>
     <defdate>2017-07-01</defdate>
     <defsatdate>2017-09-01</defsatdate>
  </default>    
</acc>

我需要计算在今天的最后六个月内有多少帐户有defdate,但帐户没有得到满足。那是在过去六个月内存在 defdate 的地方,并且不存在 defsatdate。 (请注意,如果帐户没有输入默认值,则该部分将根本不存在)。

请注意,此 xpath 将在实时环境中运行,因此日期部分需要是动态的并计算出今天是什么,而不是我能够在 xpath 中修复它。

因此,在上面的示例中,帐户在过去六个月内违约,但也很满意。因此,它不会进入我的计数。

我看过翻译功能等,但我还是个新手,所以很挣扎!

【问题讨论】:

    标签: xml date xpath count compare


    【解决方案1】:
    count(//acc[not(.//defsatdate) and 
                translate(.//defdate, '-','') <= '20171031' and
                translate(.//defdate, '-','') >= '20170331'])
    

    (为了便于阅读,添加了换行符)

    必要的解释

    //acc[not(.//defsatdate)      - find `acc` without `defsatdate`
    translate(.//defdate, '-','') - remove dash from the string
    

    【讨论】:

    • 非常感谢,希望这对部分查询有所帮助,我希望以某种方式动态地进行日期比较,因为 xpath 将在在线环境中运行(即我想要说=今天-6个月)系统在哪里以某种方式查看xpath运行时的系统日期?这将取决于将在其中运行搜索的系统,还是今天()是否有 xpath 函数?
    • 至少,xpath 1.0 做不到。我使用一个技巧将日期转换为整数,按日期排序。您应该使用程序语言设置日期。不难
    猜你喜欢
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多