ns オプションの例
- オプション ns=remove が使用されます。
以下の例の中では次の定義が使用されています。
D info DS QUALIFIED D type 25A VARYING D qty 10I 0 D price 7P 3ファイル info1.xml に以下が含まれていると想定します。<abc:info xmlns:abc="http://www.abc.xyz"> <abc:type>Chair</abc:type> <abc:qty>3</abc:qty> <abc:price>79.99</abc:price> </abc:info>この XML 文書内の名前 (abc:type など) を RPG サブフィールド名に使用することはできません。
オプション ns=remove は、 XML-INTO 命令が、一致するサブフィールドまたは path オプション内に 指定された名前を検索する前に、名前空間 (abc) とコロンが XML 名から除去 されることを指定します。
XML 名 abc:type は、名前空間 abc: が除去された後は、RPG サブフィールド TYPE に 一致します。
xml-into info %xml('info1.xml' : 'doc=file ns=remove'); // info.type = 'Chair' // info.qty = 3 // info.price = 79.99 - オプション ns=merge が使用されます。
以下の例の中では次の定義が使用されています。
D info DS QUALIFIED D abc_type 25A VARYING D def_type 25A VARYING D abc_qty 10I 0 D abc_price 7P 3ファイル info2.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>この XML 文書には、名前空間 abc が付いている名前 abc:type が含まれています。
また、この XML 文書には、名前空間 def が付いている名前 def:type も含まれています。このケースでオプション namespace=remove を 使用することはできません。もし使用すると、2 つの異なる XML 要素の 名前が、1 つの RPG サブフィールド TYPE に一致することになるからです。
オプション ns=merge が指定されます。これは、一致するサブフィールドを XML-INTO 命令が検索する前に、 名前空間 (abc) と XML 名の残りの部分を、名前の 2 つの部分を下線で 区切ってマージすることを指示します。
名前空間 abc と type がマージされた後、 名前 abc_type は RPG サブフィールド ABC_TYPE と 一致します。名前 def_type と RPG サブフィールド DEF_TYPE は、XML 名の 2 つの部分がマージされた後に 一致します。
データ構造名 info は、 マージされた XML 名 abc_info と一致しないため、path オプション が指定される必要があります。マージされた名前 abc_info が path オプション内で使用 されます。
このタイプの XML 文書を処理する別の方法については、名前空間接頭部オプションを 参照してください。
xml-into info %xml('info2.xml' : 'doc=file ns=merge path=abc_info'); // info.abc_type = 'Chair' // info.def_type = 'Modern' // info.abc_qty = 3 // info.abc_price = 79.99