Mule 4:DW 转换:如何连接 XML 中嵌套节点的值?
Mule 4 : DW transformation : How to concatenate the values of a nested node in XML?
场景:
从下面的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)
} )
请帮忙。提前致谢
这个脚本产生了预期的结果。
%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))
} )
场景: 从下面的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)
} )
请帮忙。提前致谢
这个脚本产生了预期的结果。
%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))
} )