目次

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

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

フロー全体の動きはXML子要素同士の結合と出力例1を参照。

希望の結果

XML内のfactoryノードの抽出条件をもっと厳しくしたい。

Get data from XML 1で行っている以下の指定は「ノード名が“factory”から始まる」の意なので、これを「ノード名が“factory”から始まり英大文字1桁+数字3桁かつ最後の数字が1のノード」を対象にしたい。

/info/factories/*[starts-with(name(),'factory')]

PentahoのXPathは正規表現を受け付けてくれないようなので、別の方法でフィルタする必要がある。

入力XML1
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>
入力XML2
report-IN2.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>
出力CSV
report-OUT.csv
factory,rank,mainItem,capacity,note,desc
factoryF001,C,P002,2,,P型
factoryA001,A,P005,2,精密加工,P型
factoryB001,C,S001,2,,S型
factoryG001,C,S020,3,,S型赤

定義

フロー

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

フィルター

Get data from XML 1でフィルターしきれなかった内容を補完する。
“factory”で始まる名前が項目factoryに格納されてくるので、改めて正規表現で名称を指定し、合致しないレコードを除外する。

この例の意味するところは「項目factoryの値が“factoryXnn1”の形式、Xは英大文字でnnは00~99であれば処理する」の意となる。