ネストされたループを単純なループに結合 - 7.3

Talend Data Mapperユーザーガイド

Version
7.3
Language
日本語
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
Talend Studio
Content
ジョブデザインと開発 > ジョブデザイン
Last publication date
2023-08-02

ネストされたループを結合させることで、ネストされたループを持つXMLストラクチャーをフラットなCSVストラクチャーに変換します。

始める前に

マップを作成し、入力ストラクチャーと出力ストラクチャーを追加済みであること。

このタスクについて

この例では、入力XMLファイルには発注書に関する情報が含まれています。各AddressエレメントにはItemsエレメントが含まれており、これにはItemエレメントが少なくとも1つ含まれています。変換の目標は、それぞれのItemについて行があるCSVファイルを用意することです。各行には関連する配送先情報も含まれている必要があります。

この例では、入力として次のXMLサンプルを使います:
<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>
出力ストラクチャーは以下のように定義されています:
ItemsShipping
	item (0:*)
		PurchaseOrderNumber
		ShipTo
		ShipDate
		PartNumber
		ProductName
		Quantity
		USPrice

手順

  1. 入力PurchaseOrderNumberShipDateを、対応する出力エレメントにドラッグ&ドロップします。
  2. [Functions] (ファンクション)タブを開き、Concatファンクションを出力ShipToエレメントにドラッグします。
    このファンクションは、入力からのさまざまな住所エレメントを1つの出力エレメントに連結させるために使われます。
  3. 次の入力エレメントを、ShipTo出力エレメントの[Value] (値)タブにあるConcatファンクションにドラッグします。
    • Name
    • Street
    • City
    • State
    • Zip
    • Country
    ヒント: Concatにエレメントをドロップしてリストの最上位に追加したり、別のエレメントの前後にドロップしたりできます。
  4. Concatファンクションをダブルクリックし、連結されたエレメント間に追加する文字列を定義します。
    このパラメーターはデフォルトで空になっています。たとえばスペースで住所を部分ごとに区切る場合は、[Join String] (Join文字列)フィールドにスペースを入力します。
  5. 入力PartNumberエレメントを対応する出力にドラッグします。
    出力ストラクチャーは入力Addressエレメントで既にループしているため、競合が発生します。
  6. ダイアログボックスが開いたら、[Change the output map element looping] (出力マップエレメントルーピングの変更)を選択し、[OK]をクリックします。

    このオプションを選択すると、出力ストラクチャーが入力Itemエレメントでループします。コンテキストは出力Itemループに自動的に追加されます。

    そのため、Addressエレメントに複数のItemエレメントがある場合、出力に各Itemの行が含まれるようになります。

  7. 入力エレメントであるProductNameQuantityUSPriceを、対応する出力エレメントにドラッグします。

タスクの結果

これでマッピングが設定されます。サンプルドキュメントがある場合は、[Test Run] (テスト実行)をクリックして結果を確認します。この例では次のようになります:
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