2017-02-03 2 views
-1

Je dois lire un fichier CSV avec 6 différents formats structurés et convertir au format XML. J'ai besoin d'aide pour lire le fichier CSV multi-structuré dans mule.Comment convertir CSV étendu en XML dans mule

entrée de l'échantillon:

01,12345, Cap, 01-02-2017
02,12345, sujet1, sujet2, sujet3, sujet4, sujet5
03,12345,65432,45, ABS
04,12345, ABC, DEF ,,
05,12345,5325, ABC,
06,12345,87.9, ASDF, LKJ
06,12345,99, ABC, WERT

Résultats escomptés:

<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> 
+3

Il est beaucoup mieux d'inclure toutes les informations nécessaires dans la réponse elle-même. Cela permettra également un meilleur formatage. Voir [Comment demander] (http://stackoverflow.com/help/how-to-ask). – yeputons

+1

Possible copie de [Peut-on donner un exemple comment convertir csv en xml dans mule?] (Http://stackoverflow.com/questions/24604599/can-ysomeone-give-example-how-to-convert-csv-to- xml-in-mule) – thodic

+0

Pouvez-vous différencier les 6 différentes structures d'entrée dans une nouvelle ligne ou alors? Il est difficile de lire la délimitation entre eux. –

Répondre

0

données postulant que ne changera pas, dataweave transformation est

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

D'autres valeurs peuvent être remplies à l'aide S1: payload[1][3] et ainsi de suite.

deuxième chemin utilise la carte, même si elle suppose également des données est statique, peu plus flexble

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