【问题标题】:Mule 4 : DW transformation : How to concatenate the values of a nested node in XML?Mule 4:DW 转换:如何在 XML 中连接嵌套节点的值?
【发布时间】:2021-06-13 22:28:50
【问题描述】:

场景: 从以下 XML 中,将学生的分数和科目与“-”连接起来,并将其作为 JSON 输出。

输入:

<StudentsData>
    <Student name="ABC" rollnumber="123">
        <Subject name="Maths" marks="90" Sem="1st"/>
        <Subject name="Eng" marks="67" Sem="1st"/>
        <Subject name="Physics" marks="54" Sem="1st"/>
        <Subject name="Chemitry" marks="77" Sem="1st"/>
        <Subject name="Biology" marks="89" Sem="1st"/>
    </Student>
    <Student name="DEF" rollnumber="123">
        <Subject name="Maths" marks="87" Sem="1st"/>
        <Subject name="Eng" marks="89" Sem="1st"/>
        <Subject name="Physics" marks="88" Sem="1st"/>
        <Subject name="Chemitry" marks="55" Sem="1st"/>
        <Subject name="Biology" marks="87" Sem="1st"/>
    </Student>
</StudentsData>

预期输出

[
  {
    "Name": "ABC",
    "Sub1": "Maths-90",
    "Sub2" : "Eng-67",
    "Sub3" : "Physics-54",
    "Sub4" :  "Chemitry-77",
    "Sub5" : "Biology-89"
  },
  {
    "Name": "DEF",
    "Sub1": "Maths-87",
    "Sub2" : "Eng-89",
    "Sub3" : "Physics-88",
    "Sub4" :  "Chemitry-55",
    "Sub5" : "Biology-87"
  }
]

我想做什么:

%dw 2.0
output application/json
fun concatenateMarksAndSubject(items) = (items reduce ((item, accumulator = []) ->
    accumulator << (item.@name ++ "|" ++ item.@marks)
      )) 
---
payload.StudentsData.*Student map ((student, index) -> {
    "Name": student.@name,
     "Sub$(index)" :  concatenateMarksAndSubject(student.*Subject)
} )

请帮忙。提前致谢

【问题讨论】:

    标签: dataweave mule4


    【解决方案1】:

    此脚本产生预期的结果。

    %dw 2.0
    output application/json
    fun concatenateMarksAndSubject2(items) = 
        items 
            mapObject ((value, key, index) -> (value.@name): value.@marks ) 
            pluck ((value, key, index) -> "Sub$(index)": key ++ "-" ++ value )
    ---
    payload.StudentsData.*Student map ((student, index) -> {
        "Name": student.@name,
         (concatenateMarksAndSubject2(student))
    } )
    

    【讨论】:

    • 成功了,非常感谢。在 map 和 reduce 之间,我多次忘记了 mapObject 方法。这将是一个值得记住的好用例 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 2020-05-24
    • 1970-01-01
    • 2015-07-17
    • 2014-01-26
    • 1970-01-01
    • 2022-12-06
    相关资源
    最近更新 更多