nsprefix オプションの例

  1. 以下の例の中では次の定義が使用されています。
    D info            DS                  QUALIFIED
    D   type                        25A   VARYING DIM(2)
    D   ns_type                     10A   VARYING DIM(2)
    D   qty                         10I 0
    D   price                        7P 3
    D   ns_price                    10A   VARYING
    ファイル info3.xml に以下が含まれていると想定します。
    <abc:info xmlns:abc="http://www.abc.xyz"
              xmlns:def="http://www.def.xyz">
     <abc:type>Chair</abc:type>
     <abc:qty>3</abc:qty>
     <def:type>Modern</def:type>
     <abc:price>79.99</abc:price>
    </abc:info>

    RPG プログラマーが、RPG サブフィールドのうちのいくつかと一致する XML 名に 使用される名前空間を取得できるように、XML-INTO のオプション ns=remove nsprefix=ns_ が 指定されます。オプション nsprefix=ns_ は、 NS_ で始まるサブフィールドが、名前空間値を保持する候補であることを 示します。

    この XML 文書には、RPG サブフィールド TYPE にマップされる 要素が、abc:typedef:type の 2 つあります。

    名前空間が除去された後、名前が type の XML 要素が 2 つあるため、TYPE サブフィールド は DIM(2) を指定して定義されます。NS_TYPE サブフィールド も DIM(2) を指定して定義されていて、XML-INTO は、 TYPE サブフィールドに一致する XML 名の各オカレンスの名前空間値を入れることができます。

    XML-INTO は、XML 名 abc:type を処理するときに、TYPE(1) サブフィールド を値 'Chair' に設定し、NS_TYPE(1) サブフィールド を値 'abc' に設定します。

    XML-INTO は、XML 名 def:type を処理するときに、 TYPE(2) サブフィールドを値 'Modern' に設定し、 NS_TYPE(2) サブフィールドを値 'def' に設定します。

    XML-INTO は、XML 名 abc:qty を処理するときに、QTY サブフィールド を値 3 に設定します。NS_QTY という名前のサブフィールドはないため、 名前空間値がサブフィールドに保存されることはありません。

    XML-INTO は、XML 名 abc:price を処理するときに、PRICE サブフィールド を値 79.99 に設定し、NS_PRICE サブフィールドを値 'abc' に設定します。

       xml-into info %xml('info3.xml'
                       : 'doc=file ns=remove nsprefix=ns_');
       // info.type(1) = 'Chair'
       // info.ns_type(1) = 'abc'
       // info.type(2) = 'Modern'
       // info.ns_type(2) = 'def'
       // info.qty = 3
       // info.price = 79.99
       // info.ns_price = 'abc'