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