【问题标题】:How to convert extended CSV to XML in mule如何在 mule 中将扩展的 CSV 转换为 XML
【发布时间】:2017-02-15 20:45:19
【问题描述】:

我必须读取具有 6 种不同结构化格式的 CSV 文件并转换为 XML 格式。我需要帮助来读取 mule 中的多结构 CSV 文件。

示例输入:

01,12345,Cap,01-02-2017
02,12345,subject1,subject2,subject3,subject4,subject5
03,12345,65432,45,ABS
04,12345,ABC,DEF,,
05,12345,5325,ABC,
06,12345,87.9,ASDF,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>

【问题讨论】:

标签: mule dataweave


【解决方案1】:

假设数据不会改变,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]等填充。

第二种方法是使用地图,虽然它也假设数据是静态的,更灵活一点

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2014-04-23
    • 2020-05-24
    • 1970-01-01
    相关资源
    最近更新 更多