# XMLレコード単位=“要素”の変換

入力ファイルがXML形式のとき、「XMLレコード単位」を"要素"に設定すると、条件ごとに異なる階層をレコードとして指定できます。

以下の入力ファイル（XML形式）、スキーマファイル、XML情報ツリーを例に、抽出条件ごとに出力されるデータ（CSV形式）を説明します。

図4.66 入力ファイル

図4.67 スキーマファイル

画面4.33 XML情報ツリー

(1) 抽出条件が「要素="C1"」のとき

マッピングを以下のように設定し、繰り返し対象とします。

画面4.34 マッピング情報

入力ファイルを処理したときの挙動は以下のようになります。

1. 最初の出力データは要素="C1"なので、"c1"が出力されます。

2. 次に要素="C1"の子要素として<CC1>～</CC1>が出力対象となりますので、"data4"、"data5"が出力されます。ここまでが1レコード目となります。

3. 要素="C1"が繰り返し設定のため、次の<C1>～</C1>が出力対象となります。2レコード目の先頭データとして"c2"が出力されます。

4. 次に要素="C1"の子要素として<CC1>～</CC1>が出力対象となりますので、"data13"、"data14"が出力されます。ここまでが2レコード目となります。

出力ファイルは以下のようになります。

図4.68 出力ファイル

(2) 抽出条件が「要素="CC1"」のとき

マッピングを以下のように設定し、繰り返し対象とします。

画面4.35 マッピング情報

入力ファイルを処理したときの挙動は以下のようになります。

1. 最初の出力データはマッピングを行っている<C1>の値のため、"c1"が出力されます。

2. 次に要素="CC1"が抽出条件として指定されているため、<CC1>～</CC1>の子要素<CCC1>～</CCC1>、<CCC2>～</CCC2>が出力対象となります。"data4"、"data5"が出力されます。ここまでが1レコード目となります。

3. 要素="CC1"が繰り返し設定のため、<CCC1>～</CCC1>、<CCC2>～</CCC2>が入力データ数分出力されます。このとき、1データ目にマッピングされている<C1>の値"c1"が出力され、"data7"、"data8"までが2レコード目として出力されます。

4. 1つ目の<C1>の値は出力が終了したので、2つ目の<C1>の値、"c2"が出力されます。

5. 要素="CC1"が抽出条件として指定されているため、<CC1>～</CC1>の子要素<CCC1>～</CCC1>、<CCC2>～</CCC2>が出力対象となります。"data13"、"data14"が出力されます。

6. 要素="CC1"が繰り返し設定のため、こちらも(3)と同様、<CCC1>～</CCC1>、<CCC2>～</CCC2>が入力データ数分出力されます。このとき、1データ目にマッピングされている<C1>の値"c2"が出力され、"data16"、"data17"が出力されます。

出力ファイルは以下のようになります。

図4.69 出力ファイル

(3) 抽出条件が「要素="C1"」で指定された要素より上位階層をマッピングしたとき

「XMLレコード単位」を“要素”に設定すると、指定した要素より上位階層、下位階層に定義されている属性をマッピングすることで、指定された要素の階層以外でも入力データとして扱うことができます。

マッピングを以下のように設定し、繰り返し対象とします。

画面4.36 マッピング情報

入力ファイルを処理したときの挙動は以下のようになります。

1. 最初の出力データはマッピングされている要素="B1"なので、"data3"が出力されます。

2. 次に要素="C1"がマッピングされているので、"c1"が出力されます。

3. 次に要素"C1"の子要素として <CC1>～</CC1>が出力対象となりますので、"data4"、"data5"が出力されます。(2)と(3)が要素="C1"の1レコード目となります。

4. 次に入力データの要素="B1"があるため、2レコード目の先頭データとして"data12"が出力されます。

5. 要素="C1"が繰り返し設定のため、次の<C1>～</C1>が出力対象となります。繰り返しの先頭データとして"c2"が出力されます。

6. 次に要素="C1"の子要素として<CC1>～</CC1>が出力対象となりますので、"data13"、"data14"が出力されます。ここまでが2レコード目となります。

出力ファイルは以下のようになります。

図4.70 出力ファイル