Combiner des boucles imbriquées en une boucle simple - 7.3

Guide d'utilisation de Talend Data Mapper

Version
7.3
Language
Français (France)
Product
Talend Big Data Platform
Talend Data Fabric
Talend Data Management Platform
Talend Data Services Platform
Talend MDM Platform
Talend Real-Time Big Data Platform
Module
Studio Talend
Content
Création et développement > Création de Jobs

Convertissez une structure XML avec boucles imbriquées en une structure CSV plate en combinant des boucles imbriquées.

Avant de commencer

Vous avez créé une map et ajouté une structure d'entrée et de sortie.

Pourquoi et quand exécuter cette tâche

Dans cet exemple, le fichier XML d'entrée contient des informations concernant une commande. Chaque élément Address contient un élément Items, contenant au moins un élément Item. L'objectif de la transformation est d'avoir un fichier CSV avec une ligne pour chaque élément Item. Chaque ligne doit également contenir les informations d'expédition.

Cet exemple utilise l'échantillon XML suivant en entrée :
<PurchaseOrderShipping PurchaseOrderNumber="99503" OrderDate="2011-03-15T12:10:03+05:30">
  <ShipDate>2011-04-30T23:50:00+05:30</ShipDate>
  <Address>
    <Name>Deandre King</Name>
    <Street>4894  Winding Way</Street>
    <City>Southfield</City>
    <State>MI</State>
    <Zip>48075</Zip>
    <Country>USA</Country>
    <DeliveryNotes>Please leave packages in shed by driveway.</DeliveryNotes>
    <Items>
      <Item PartNumber="872-AA">
        <ProductName>Lawnmower</ProductName>
        <Quantity>1</Quantity>
        <USPrice>148.95</USPrice>
        <Comment>Confirm this is electric</Comment>
      </Item>
      <Item PartNumber="926-AA">
        <ProductName>Baby Monitor</ProductName>
        <Quantity>2</Quantity>
        <USPrice>39.98</USPrice>
      </Item>
    </Items>
  </Address>
  <Address>
    <Name>Burl Clark</Name>
    <Street>3807 Pointe Lane</Street>
    <City>Fort Lauderdale</City>
    <State>FL</State>
    <Zip>33308</Zip>
    <Country>USA</Country>
    <Items>
      <Item PartNumber="356-KX">
        <ProductName>Gas canister</ProductName>
        <Quantity>1</Quantity>
        <USPrice>123.02</USPrice>
      </Item>
    </Items>
  </Address>
</PurchaseOrderShipping>
La structure de sortie est définie comme suit :
ItemsShipping
	item (0:*)
		PurchaseOrderNumber
		ShipTo
		ShipDate
		PartNumber
		ProductName
		Quantity
		USPrice

Procédure

  1. Glissez-déposez les éléments d'entrée PurchaseOrderNumber et ShipDate sur les éléments de sortie correspondants.
  2. Ouvrez l'onglet Functions et glissez la fonction Concat sur l'élément de sortie ShipTo.
    Cette fonction sera utilisée pour concaténer les différents éléments d'adresse de l'entrée en un seul élément de sortie.
  3. Glissez les éléments d'entrée suivants sur la fonction Concat dans l'onglet Value de l'élément de sortie ShipTo :
    • Name (Nom)
    • Street
    • City (ville)
    • État
    • Zip
    • Country
    Conseil : Vous pouvez déposer un élément sur Concat pour l'ajouter en haut de la liste, ou vous pouvez le déposer avant ou après un autre élément.
  4. Double-cliquez sur la fonction Concat afin de définir la chaîne de caractères à ajouter entre les éléments concaténés.
    Ce paramètre est vide par défaut. Si vous souhaitez séparer les différentes parties de l'adresse, par exemple par un espace, saisissez un espace dans le champ Join String.
  5. Glissez l'élément d'entrée PartNumber dans la sortie correspondante.
    Puisque la structure de sortie est déjà en cours d'itération sur l'élément d'entrée Address, cela crée un conflit.
  6. Dans la boîte de dialogue qui s'ouvre, sélectionnez Change the output map element looping (Modifier l'itération de l'élément de map de sortie) puis cliquez sur OK.

    Lorsque vous sélectionnez cette option, la structure de sortie itère sur l'élément Item. Un contexte est automatiquement ajouté à la boucle item de sortie.

    En conséquence, si un élément Address contient plusieurs éléments Item, la sortie va contenir une ligne pour chaque élément Item.

  7. Glissez les éléments d'entrée ProductName, Quantity et USPrice sur les éléments de sortie correspondants.

Résultats

Votre mapping est configuré. Si vous avez un document échantillon, vous pouvez cliquer sur Test Run pour voir le résultat. Dans cet exemple, il ressemble à ceci :
PurchaseOrderNumber,ShipTo,ShipDate,PartNumber,ProductName,Quantity,USPrice
99503,Deandre King 4894  Winding Way Southfield MI 48075 USA,2011-04-30T23:50:00+05:30,872-AA,Lawnmower,1,148.95
99503,Deandre King 4894  Winding Way Southfield MI 48075 USA,2011-04-30T23:50:00+05:30,926-AA,Baby Monitor,2,39.98
99503,Burl Clark 3807 Pointe Lane Fort Lauderdale FL 33308 USA,2011-04-30T23:50:00+05:30,356-KX,Gas canister,1,123.02