繰返し項目のある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</値>
</明細>
</伝票>
</文書> |
1つのXML文書内に伝票要素と明細要素の2階層の繰返しがあるXML形式のデータを、明細ノード単位に出力レコードを生成して出力します。
各明細ノードに対して、そのヘッダと、明細ノードを含む伝票のヘッダ、さらにその伝票を含む文書のヘッダを出力します。
連結条件
入力項目定義 | {
document(Jnl) /文書/伝票/明細 {
$明細ヘッダ ( ./明細ヘッダ/text() )[1],
$伝票ヘッダ ( ../伝票ヘッダ/text() )[1],
$文書ヘッダ ( ../../文書ヘッダ/text() )[1]
}
} |
リターン式 | {$文書ヘッダ 文書, $伝票ヘッダ 伝票, $明細ヘッダ 明細} |
連結結果
文書 | 伝票 | 明細 |
|---|---|---|
文書のヘッダ | 伝票ヘッダ1 | 明細ヘッダ1-1 |
文書のヘッダ | 伝票ヘッダ1 | 明細ヘッダ1-2 |
文書のヘッダ | 伝票ヘッダ2 | 明細ヘッダ2-1 |
文書のヘッダ | 伝票ヘッダ2 | 明細ヘッダ2-2 |
明細ノード単位に出力レコードを生成し、明細のヘッダと、明細ノード内で繰り返されている値ノードを列方向に展開して出力します。
連結条件
入力項目定義 | {
document(Jnl) /文書/伝票/明細 {
$明細ヘッダ ( ./明細ヘッダ/text() )[1],
$値1 ( ./値[1]/text() )[1],
$値2 ( ./値[2]/text() )[1],
$値3 ( ./値[3]/text() )[1],
$値4 ( ./値[4]/text() )[1],
$値5 ( ./値[5]/text() )[1]
}
} |
リターン式 | {$明細ヘッダ 明細, $値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 |
伝票ノード単位に出力レコードを生成し、各伝票ノードの中の最後の明細ノードだけを出力します。
連結条件
入力項目定義 | {
document(Jnl) /文書/伝票 {
$伝票ヘッダ ( ./伝票ヘッダ/text() )[1],
$明細ヘッダ ( ./明細[last()]/明細ヘッダ/text() )[1]
}
} |
リターン式 | { $伝票ヘッダ 伝票, $明細ヘッダ 明細 } |
連結結果
伝票 | 明細 |
|---|---|
伝票ヘッダ1 | 明細ヘッダ1-2 |
伝票ヘッダ2 | 明細ヘッダ2-2 |