変更の始まり

スカラー変数またはサブフィールドに対して予期しない非テキスト・コンテンツがある場合の allowextra オプションの例

以下の例の中では次の定義が使用されています。
D text            S            200A    VARYING

D order           DS                   QUALIFIED
D   part                        25A    VARYING
D   quantity                    10I 0
ファイル txt.xml に以下の行が含まれていると想定します。
<?xml version='1.0' ?>
<text><word>Hello</word><word>World</word></text>
ファイル ord.xml に以下の行が含まれていると想定します。
<?xml version='1.0' ?>
<order>
 <part>Jack in a box<discount>yes</discount></part>
 <quantity multiplier="10">2</quantity>
</order>
  1. RPG 変数 text は、独立フィールドです。XML ファイル txt.xml には text という名前の要素があり、word という名前の子要素が 2 つあります。 text XML 要素 に子要素があり、allowextra オプション はデフォルトで no に設定されているため、XML-INTO 命令は状況コード 00353 で失敗します。
      xml-into(e) text %XML('txt.xml' : 'doc=file');
      // %error = *on
      // %status = 353
  2. オプション allowextra=yes が指定されます。子 XML 要素 は無視されます。XML-INTO 命令は成功しますが、 text XML 要素の内容は子 XML 要素のみであるため、 RPG フィールド text で使用可能なデータはありません。
      xml-into text %XML('txt.xml' : 'allowextra=yes doc=file';
      text = '';
  3. RPG 変数 order は 2 つのサブフィールドがあるデータ構造 であり、サブフィールド自体はデータ構造ではありません。これらのサブフィールドを表す XML 要素 には子要素や属性があるべきではありませんが、part XML 要素 には discount という 1 つの子があり、quantity XML 要素 には属性 multiplier があります。オプション allowextra=yes が 指定されているため、discount 要素および multiplier 属性 は無視されます。
      xml-into order %XML('ord.xml'
                        : 'doc=file allowextra=yes');
      // order.part = "Jack in a box"
      // order.quantity = 2
変更の終わり