首页 > 解决方案 > 在 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 中实现这一点。

谢谢 !!

标签: muledataweave

解决方案


假设您已经从数据库中读取了数据,您可以使用以下内容:

%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
            })
        })
    }
})

推荐阅读