変更の始まり

countprefix オプションの例

以下の例の中では次の定義が使用されています。
D attendee_type...
D                 DS                  qualified template
D   name                        20a   varying
D   phone                        4s 0

D meeting         DS                  qualified
D   location                    20a   varying
D   attendee                          likeds(attendee_type)
D                                     dim(100)
D   numAttendee...
D                               10i 0

D email           DS                  qualified
D   to                          40a   varying
D   cc                          40a   varying
D   from                        40a   varying
D   countCc                      5i 0
D   subject                    100a   varying
D   countSubject                 5i 0
D   body                      1000a   varying

D order1          DS                  qualified
D   numpart                     10i 0
D   part                        20a   varying dim(100)

D order2          DS                  qualified
D   numpart                     10i 0
D   part                        20a   varying dim(100)
D   countpart                   10i 0
  1. ファイル meeting123.xml に以下が含まれていると想定します。
    <meeting>
       <location>Room 7a</location>
       <attendee name="Jim" phone="1234"/>
       <attendee name="Mary" phone="2345"/>
       <attendee name="Abel" phone="6213"/>
    </meeting>
    1. countprefix オプションは num 接頭部を指定します。

      この XML-INTO 命令は、countprefix サブフィールドである numAttendee を 3、 つまり、この命令によって設定された attendee サブフィールドの数に設定します。 配列 attendee 用の countprefix サブフィールドがあることによって、この配列に対する XML データの欠落が暗黙的に許容されるため、オプション allowmissing=yes を指定する必要はありません。

       xml-into meeting %xml('meeting123.xml'
                        : 'doc=file countprefix=num');
       // meeting.attendee(1):  name='Jim'   phone=1234
       // meeting.attendee(2):  name='Mary'  phone=2345
       // meeting.attendee(3):  name='Abel'  phone=6213
       // meeting.numAttendee = 3 for i = 1 to meeting.numAttendee;
          if meeting.attendee(i) ...
       endfor;
    2. countprefix サブフィールドは指定されません。

      配列 attendee に対する XML データが不十分であるため、この XML-INTO 命令は 失敗し、numAttendee の XML データはまったくありません。

       xml-into(e) meeting %xml('meeting123.xml'
                        : 'doc=file');
       // %error = *on
  2. ファイル email456.txt に以下が含まれていると想定します。
    <email to="jack@anywhere.com" from="jill@anywhere.com">
       <subject>The hill</subject>
       <body>How are you feeling after your fall?</body>
    </email>

    countprefix=count オプションが指定され、 countprefix サブフィールドの 接頭部が count であると指示しています。

    cc サブフィールドに対する XML データはありませんが、countprefix サブフィールドである countCc が あって、cc サブフィールドが XML から設定されなかったという情報を受け取る ことができるため、この XML-INTO 命令は成功します。

     xml-into email %xml('email456.xml'
                       : 'doc=file countprefix=count');
     // email.to = 'jack@anywhere.com'
     // email.from = 'jill@anywhere.com'
     // email.cc = ??  (not set by XML-INTO)
     // email.countCc = 0
     // email.subject = 'The hill'
     // email.countSubject = 1
     // email.body = 'How are you feeling after your fall?'
    プログラムは countCc および countSubject サブフィールドの 値を使用して、cc および subject サブフィールド が XML-INTO 命令によって設定されたかどうかを判別します。
     if email.countCc = 1;
        cc = email.cc;
     else;
        cc = '';
     endif;
     if email.countSubject = 1;
        subj = email.subject;
     else;
        subj = "NO SUBJECT";
     endif;
  3. ファイル File order789.txt に以下が含まれていると想定します。
    <order numpart="2">
       <part>hammer</part>
       <part>saw</part>
    </order>

    XML 文書には、属性 numpart が 含まれていて、文書中にある part 要素の数を示しています。

    1. オプション countprefix=num が指定され、numpart が 配列 part 用の countprefix サブフィールドであると指示しようとしています。

      この XML-INTO 命令は失敗します。サブフィールド numpart は countprefix サブフィールド であるため、明示的に XML-INTO 命令で設定することはできません。

       xml-into(e) order1 %xml('order789.xml'
                   : 'doc=file countprefix=num path=order');
       // %error is set on
    2. オプション countprefix=count が指定され、countpart が 配列 part 用の countprefix サブフィールドであると指示しています。

      この XML-INTO 命令は成功します。サブフィールド numpart は XML 文書から 2 に 設定され、サブフィールド countpart は countprefix 処理によって 2 に 設定されます。part 配列 は countprefix オプションによってカウントされるため、 配列全体を設定するための十分な XML データがないことはエラーにはなりません。

       xml-into order2 %xml('order789.xml'
                : 'doc=file countprefix=count path=order');
       // order2.numpart = 2
       // order2.part(1) = 'hammer'
       // order2.part(2) = 'saw'
       // order2.countpart = 2
変更の終わり