mule - 在 Dataweave 转型方面需要帮助
问题描述
我有 oracle 数据库表CASH,其中包含以下列:
REGISTER DATE CASE BAG TYPE
1234 24-SEP-18 1123 112 A
1234 24-SEP-18 1124 113 S
1234 24-SEP-18 1123 116 S
1234 24-SEP-18 1124 117 A
7895 24-SEP-18 2568 119 A
7895 24-SEP-18 2568 118 S
其中收银机号是收银机,可以有多个 CASE 链接,每个 CASE 可以有多个 BAG 和 Type。我想在 Dataweave 中将其转换为以下 XML:
<ROOT>
<REGISTERS>
<REGISTER>1234</REGISTER>
<DATE>24-SEP-2018</DATE>
<DETAILS>
<BAG>1123</BAG>
<DETAIl>
<BAG>112</BAG>
<TYPE>A</TYPE>
</DETAIl>
<DETAIl>
<BAG>116</BAG>
<TYPE>S</TYPE>
</DETAIl>
</DETAILS>
<DETAILS>
<BAG>1124</BAG>
<DETAIl>
<BAG>113</BAG>
<TYPE>S</TYPE>
</DETAIl>
<DETAIl>
<BAG>117</BAG>
<TYPE>A</TYPE>
</DETAIl>
</DETAILS>
</REGISTERS>
<REGISTERS>
<REGISTER>7895</REGISTER>
<DATE>24-SEP-2018</DATE>
<DETAILS>
<BAG>2568</BAG>
<DETAIl>
<BAG>119</BAG>
<TYPE>A</TYPE>
</DETAIl>
<DETAIl>
<BAG>118</BAG>
<TYPE>S</TYPE>
</DETAIl>
</DETAILS>
</REGISTERS>
</ROOT>
您能否指点我如何在 dataweave 中实现这一点。
谢谢 !!
解决方案
假设您已经从数据库中读取了数据,您可以使用以下内容:
%dw 1.0
%output application/xml
---
ROOT: payload groupBy (($.REGISTER as :string) ++ ($.DATE as :string)) mapObject ((entries, number) -> {
REGISTERS: {
REGISTER: entries[0].REGISTER,
DATE: entries[0].DATE as :string {format: "yyyy-MM-dd"},
(entries groupBy $.CASE map DETAILS: {
CASE: $.CASE[0],
($ map DETAIL: {
BAG: $.BAG,
TYPE: $.TYPE
})
})
}
})
推荐阅读
- git - 如何配置 GitHub 以正确使用 SSH?
- swift - 如何让我的球在加时赛中逐渐增加速度?
- azure - Azure 事件中心 - 在发送事件之前对用户进行身份验证
- python-3.x - 在我的 webapp 中显示一些数据库列是否安全?
- scala - Spark 分区 Hive 表
- c - 使用atoi将字符串索引转换为数组索引
- css - 在选择器之前使用 CSS 时的填充
- node.js - 如何使用 http-proxy-middleware 代理到许多不同的目标?
- 2sxc - 是否可能有一个字段依赖于其他字段?
- python-3.x - 让一个类的每个实例都知道另一个类的一个特定实例的最佳方法是什么?