我必须阅读包含6种不同结构格式的CSV文件并转换为XML格式。我需要帮助来阅读mule中的多结构化CSV文件。
示例输入:
01,12345,帽子,2017年1月2日
02,12345,subject1,subject2,subject3,subject4,subject5
03,12345,65432,45,ABS
04,12345,ABC,DEF ,,
05,12345,5325,ABC,
06,12345,87.9,航空自卫队,LKJ
06,12345,99,ABC,WERT
预期产出:
<Root>
<Sample>
<Number>12345</Number>
<B>Cap</B>
<C>01-02-2017</C>
</Sample>
<Example>
<Sub>
<Number>12345</Number>
<S1>subject1</S1>
<S2>subject2</S2>
<S3>subject3</S3>
<S4>subject4</S4>
<S5>subject5</S5>
</Sub>
<Sub1>
<Number>12345</Number>
<A1>65432</A1>
<A2>45</A2>
<A3>ABS</A3>
</Sub1>
<Sub2>
<Number>12345</Number>
<B1>ABC</B1>
<B2>DEF</B2>
<B3/>
</Sub2>
<Sub3>
<Number>12345</Number>
<C1>5325</C1>
<C2>ABC</C2>
</Sub3>
<Sub4>
<Sub_rec>
<Number>12345</Number>
<D1>87.9</D1>
<D2>ASDF</D2>
<D3>LKJ</D3>
</Sub_rec>
<Sub_rec>
<Number>12345</Number>
<D1>99</D1>
<D2>ABC</D2>
<D3>WERT</D3>
</Sub_rec>
</Sub4>
</Example>
</Root>
答案 0 :(得分:0)
假设数据不会改变,则dataweave转换为
%dw 1.0
%output application/xml
---
root: {
sample: {
Number: payload[0][0]
},
Example: {
sub : {
Number: payload[1][0]
},
sub1 : {
Number: payload[2][0]
},
sub2 : {
Number: payload[3][0]
},
sub3 : {
Number: payload[4][0]
},
sub4 : {
Sub_rec: {
Number: payload[5][0]
},
Sub_rec: {
Number: payload[6][0]
}
}
}
}
可以使用S1: payload[1][3]
等来填充其他值。
第二种方法是使用map,虽然它也假设数据是静态的,更灵活的
root: {
sample: {
Number: payload[0][0]
},
Example: {
(payload[1..-2] map ((row, indexOfRow) -> {
Sub : {
Number: row[0]
} when indexOfRow == 0
otherwise {
Number: row[0]
} when indexOfRow == 1
otherwise {
Number: row[0]
} when indexOfRow == 2
otherwise {
Number: row[0]
} when indexOfRow == 3
otherwise {
(payload[-2..-1] map {
sub_rec: {
Number: $[2]
}
})
}
}))
}
}