【问题标题】:How to perform date operations in Dataweave-Mulesoft如何在 Dataweave-Mulesoft 中执行日期操作
【发布时间】:2016-04-19 23:23:59
【问题描述】:

我有一个逻辑来过滤掉在 30 天之前加入的学生。我在 xml 元素中有加入日期和 lastdate。我必须使用数据编织从这两个字段中减去日期。

<School>
  <joindate>2015-10-18T00:00:00.000-08:00</joindate>
  <lastdate>2016-01-18</lastdate>
</School>

【问题讨论】:

  • 了解您的处理器是使用 XSLT 1.0 还是 2.0。

标签: xml xslt xpath mule dataweave


【解决方案1】:

有许多date and time functions 可用于 XPath/XSLT 2.0 及更高版本。看来DataWeave supports up to XSLT 3.0

以下表达式将处理 lastdatejoindate 之间的天数差异小于 30 的所有 School 元素。 p>

//School[days-from-duration(xs:date(lastdate) - xs:date(xs:dateTime(joindate))) lt 30]

【讨论】:

  • 不,它会返回一个日期。从中减去一个日期将返回一个持续时间。您可以使用 days-from-duration() 获取天数
  • 嗨,Mads Hansen,我在 dataweave 中尝试了上述语法,但它不支持 [ 大括号,您能告诉我如何做到这一点,我对此感到震惊并正在努力解决。你能说我们如何在数据编织中实现上述代码
  • 方括号是一个谓词过滤器(类似于 SQL 中的 where 子句),它过滤大括号左侧的项目,只返回谓词语句返回 true 的项目。我对 Data Weave 没有任何经验,并且不确定您要如何/在何处尝试应用它,所以我认为我无法帮助您弄清楚如何应用它。您能否发布更多代码来展示您如何尝试选择/过滤 School 元素?
  • dataweave 支持 XSLT 吗?您提供的链接描述了 XSLT,但实际上并未给出 dataweave 和 XSLT 之间的任何关系。如果您有任何链接,请详细说明或分享链接。
【解决方案2】:

试试 DataWeave 日期时间操作:

https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation#adding-a-period-of-time

从您的 XML 中获取值并将它们存储在 DataWeave 中的变量中,将它们转换为 :date 并在脚本中减去它们。

这是一个给你一个对象的例子,我认为你可以从那里修复它?

%dw 1.0
%output application/java
%var join = payload.School.joindate as :date
%var last = payload.School.lastdate as :date
---
period: join - last

【讨论】:

  • 嗨 JoostD 感谢您的帮助,但输出为 P-25Y-11M-16D 如何将其转换为天数
  • 输出负载包含一个 period 类型的对象,您不会在其中将所有可用的天数作为数字。看看这篇文章,了解更多可能对你有帮助的信息:stackoverflow.com/questions/30833582/…
猜你喜欢
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
相关资源
最近更新 更多