目次
XML子要素同士の結合と出力例1
2024-04-15
1つのXML内の階層が違うノード要素を組み合わせる例
出力ファイルを分割する場合はXML子要素同士の結合と出力例2を参照。
希望の結果
XML内のfactoriesノードとitemsノードを結合して1行にしたい。ファイルは複数ある。
入力XML1 |
---|
|
入力XML2 |
|
出力CSV |
|
定義
フロー
Get data from XML1
factoriesノードの読み出し部分。正規表現で所定の形式の名称を指定し、複数ファイルを読み込み対象にする。
ループ XPath では、関数starts-with(),name()で処理対象ノードを指し示している。
/info/factories/*[starts-with(name(),'factory')]
starts-with()は前方一致の検証関数。name()はノードの名前を返す関数。
ここの例では、名前が“factory”から始まるノードを処理対象とする指定になる。
そしてその選択されたノードから以下の情報を抜き出す。
Get data from XML2
itemsノードの読み出し部分。正規表現で所定の形式の名称を指定し、複数ファイルを読み込み対象にする。
ループXPathで“/info/items/item”を指定する。itemノードが処理対象になる。
そしてその選択されたノードから以下の情報を抜き出す。
行整列 1,行整列 2
それぞれ mainItem, name でXMLからの抽出結果をソートする。ソートしないと次のストリーム参照が正しく機能しない。
ストリーム参照
行整列 1の抽出項目 mainItem をキーに行整列 2を検索する。比較する項目nameをキー項目とする。
キーに一致するものがあれば項目name, descを、一致しなければnullを付与する。
テキストファイル出力
出力先をreport-OUT.csv とする。
カンマ区切りでMS932(windows-31j)の文字コードで出力する。
項目を絞っている。