目次

XML子要素同士の結合と出力例2

2024-04-15
1つのXML内の階層が違うノード要素を組み合わせる例

XML子要素同士の結合と出力例1の続き。

希望の結果

入力したXML毎に出力も分けたい場合。

XML内のfactoriesノードとitemsノードを結合して1行にしたい。

入力XML1 出力csv1
report-IN1.xml
<?xml version="1.0" encoding="UTF-8"?>
<info>
    <TITLE>これはサンプルです1</TITLE>
 
    <factories>
        <factoryA001><rank>A</rank><mainItem>P005</mainItem><capacity>2</capacity><note>精密加工</note></factoryA001>
        <factoryB001><rank>C</rank><mainItem>S001</mainItem><capacity>2</capacity></factoryB001>
        <factoryB010><rank>C</rank><mainItem>S020</mainItem><capacity>5</capacity><note>生産力に余力あり</note></factoryB010>
        <factoryC002><rank>A+</rank><note>ベテラン多数</note><mainItem>P005</mainItem><capacity>1</capacity></factoryC002>
        <depoD100><note>立地</note><capacity>3</capacity></depoD100>
        <depoD101><note>倉庫に問題</note><capacity>1</capacity></depoD101>
        <depoE201><note>ピックに問題</note><capacity>2</capacity></depoE201>
    </factories>
 
    <items>
        <item name="P001" desc="P型" type="C" />
        <item name="P005" desc="P型" type="C" />
        <item name="S001" desc="S型" type="X" />
        <item name="S020" desc="S型赤" type="X" />
        <item name="F001R" desc="F型復刻" type="J" />
    </items>
 
</info>
report-OUT1.csv
factory,rank,mainItem,capacity,note,desc
factoryA001,A,P005,2,精密加工,P型
factoryC002,A+,P005,1,ベテラン多数,P型
factoryB001,C,S001,2,,S型
factoryB010,C,S020,5,生産力に余力あり,S型赤
入力XML2 出力csv2
report-IN1.xml
<?xml version="1.0" encoding="UTF-8"?>
<info>
    <TITLE>これはサンプルです2</TITLE>
 
    <factories>
        <factoryF001><rank>C</rank><mainItem>P002</mainItem><capacity>2</capacity></factoryF001>
        <factoryG001><rank>C</rank><mainItem>S020</mainItem><capacity>3</capacity></factoryG001>
        <factoryG010><rank>D</rank><mainItem>S030</mainItem><capacity>2</capacity><note>設備老朽化</note></factoryG010>
        <depoA100><note>立地</note><capacity>3</capacity></depoA100>
        <depoC101><note>倉庫に問題</note><capacity>1</capacity></depoC101>
        <depoJ201><note>ピックに問題</note><capacity>2</capacity></depoJ201>
    </factories>
 
    <items>
        <item name="P002" desc="P型" type="C" />
        <item name="S030" desc="S型青" type="X" />
        <item name="S020" desc="S型赤" type="X" />
        <item name="J001" desc="J型" type="J" />
    </items>
 
</info>
report-OUT2.csv
factory,rank,mainItem,capacity,note,desc
factoryF001,C,P002,2,,P型
factoryG001,C,S020,3,,S型赤
factoryG010,D,S030,2,設備老朽化,S型青

定義

フロー

XML子要素同士の結合と出力例1との差分について説明する。

Get data from XML1

ファイル名を同時に取得する。ファイル名が格納された項目filenameの内容を出力用に書き換えてテキストファイル出力で利用する。

Replace in string

項目filenameの“-IN”部分を正規表現で“-OUT”に書き換える。

テキストファイル出力

項目filenameの内容をファイル名とし、このファイルへ出力する。これを利用する事で入力に対応する出力を個々に作る事が出来る。