Accéder au contenu principal Passer au contenu complémentaire

Combiner des boucles imbriquées en une boucle simple

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
    Note InformationsConseil : 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

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.