ページの先頭行へ戻る
Big Data Integration ServerV1.4.0 加工編導入・運用ガイド
FUJITSU Software

3.4.2 繰返し項目のあるXMLをCSVに変換する

繰返し項目のあるXML形式の入力ジャーナルファイルをCSV形式に変換する例を、以下に示します。
ここでは、以下の入力ジャーナルファイルを例に説明します。

入力ジャーナルファイル

<文書>
  <文書ヘッダ>文書のヘッダ</文書ヘッダ>
  <伝票>
    <伝票ヘッダ>伝票ヘッダ1</伝票ヘッダ>
    <明細 id='1'>
      <明細ヘッダ>明細ヘッダ1-1</明細ヘッダ>
      <値>111</値>  <値>112</値>  <値>113</値>  <値>114</値>  <値>115</値>
    </明細>
    <明細 id='2'>
      <明細ヘッダ>明細ヘッダ1-2</明細ヘッダ>
      <値>121</値>  <値>122</値>  <値>123</値>  <値>124</値>  <値>125</値>
    </明細>
  </伝票>
  <伝票>
    <伝票ヘッダ>伝票ヘッダ2</伝票ヘッダ>
    <明細 id='3'>
      <明細ヘッダ>明細ヘッダ2-1</明細ヘッダ>
      <値>211</値>  <値>212</値>  <値>213</値>  <値>214</値>  <値>215</値>
    </明細>
    <明細 id='4'>
      <明細ヘッダ>明細ヘッダ2-2</明細ヘッダ>
      <値>221</値>  <値>222</値>  <値>223</値>  <値>224</値>  <値>225</値>
    </明細>
  </伝票>
</文書>

3.4.2.1 2階層以上の繰返しを含むXML形式のデータをCSV形式に変換する

1つのXML文書内に伝票要素と明細要素の2階層の繰返しがあるXML形式のデータを、明細ノード単位に出力レコードを生成して出力します。
各明細ノードに対して、そのヘッダと、明細ノードを含む伝票のヘッダ、さらにその伝票を含む文書のヘッダを出力します。

連結条件

入力項目定義
(ListDef)
 {
	   document(Jnl)        /文書/伝票/明細 {
         $明細ヘッダ     ( ./明細ヘッダ/text() )[1],
         $伝票ヘッダ     ( ../伝票ヘッダ/text() )[1],
         $文書ヘッダ      ( ../../文書ヘッダ/text() )[1]
	   }
}
リターン式
(OutputDef)
 {$文書ヘッダ 文書, $伝票ヘッダ 伝票, $明細ヘッダ 明細}

連結結果

"文書","伝票","明細"
"文書のヘッダ","伝票ヘッダ1","明細ヘッダ1-1"
"文書のヘッダ","伝票ヘッダ1","明細ヘッダ1-2"
"文書のヘッダ","伝票ヘッダ2","明細ヘッダ2-1"
"文書のヘッダ","伝票ヘッダ2","明細ヘッダ2-2"

3.4.2.2 レコードノード内の繰返しノードを出力する

明細ノード単位に出力レコードを生成し、明細のヘッダと、明細ノード内で繰り返されている値ノードを列方向に展開して出力します。

連結条件

入力項目定義
(ListDef)
 {
	   document(Jnl)     /文書/伝票/明細 {
	       $明細ヘッダ     ( ./明細ヘッダ/text() )[1],
	       $値1      ( ./値[1]/text() )[1],
	       $値2      ( ./値[2]/text() )[1],
	       $値3      ( ./値[3]/text() )[1],
	       $値4      ( ./値[4]/text() )[1],
	       $値5      ( ./値[5]/text() )[1]
	     }
 }
リターン式
(OutputDef)
 {$明細ヘッダ 明細, $値1 単価1, $値2 単価2, $値3 単価3, $値4 単価4, $値5 単価5  }

連結結果

"明細","単価1","単価2","単価3","単価4","単価5"
"明細ヘッダ1-1","111","112","113","114","115"
"明細ヘッダ1-2","121","122","123","124","125"
"明細ヘッダ2-1","211","212","213","214","215"
"明細ヘッダ2-2","221","222","223","224","225"

3.4.2.3 繰り返されているノードの最後のノードを出力する

伝票ノード単位に出力レコードを生成し、各伝票ノードの中の最後の明細ノードだけを出力します。

連結条件

入力項目定義
(ListDef)
{
	       document(Jnl)     /文書/伝票 {
	           $伝票ヘッダ  ( ./伝票ヘッダ/text() )[1],
           $明細ヘッダ  ( ./明細[last()]/明細ヘッダ/text() )[1]
	        }
}
リターン式
(OutputDef)
 { $伝票ヘッダ 伝票,  $明細ヘッダ 明細 }

連結結果

"伝票","明細"
"伝票ヘッダ1","明細ヘッダ1-2"
"伝票ヘッダ2","明細ヘッダ2-2"