下のサンプル・プログラムでは、XML 文書の 1 セグメントずつの構文解析を示します。 例では、ファイルの XML コンテンツ、XML テキストを読み取りパーサーに送信するプログラム、および入力レコードを構文解析した結果の一連のイベントが示されています。
この機能を使用するには、XMLPARSE(XMLSS)コンパイラー・オプションを有効にしてプログラムをコンパイルする必要があります。
サンプル・プログラムでは、XML 文書のレコード (セグメント) をファイル (INFILE) から読み取り、 そのレコードをパーサーに XML PARSE ステートメントを使用して渡しています。 パーサーは、XML イベントごとに XML を処理して処理プロシージャーに制御を渡します。 処理プロシージャーがイベントを処理し、パーサーに返します。
セグメントの最後で、パーサーは XML-EVENT を END-OF-INPUT に設定し、XML-CODE をゼロに設定し、制御を処理プロシージャーに渡します。 処理プロシージャーは次の XML レコード読み取って構文解析データ項目に入れ、XML-CODE を 1 に設定してパーサーに返します。
構文解析結果の表示では、処理プロシージャーは入力の各レコードを表示し、その後に一連の XML イベントおよび XML-TEXT 内の関連テキスト・フラグメントを表示します。 XML-TEXT のコンテンツは中括弧 ({}) で表示されます。空の中括弧は、XML-TEXT が空であることを示します。 (イベント番号 08 の余分なゼロ長 CONTENT-CHARACTERS XML イベントに注意してください。 XML テキストを細切れに入力するとこのような例外が発生することがよくあります。)
このように、処理プロシージャーとパーサーは、READ ステートメントがファイル終了状況コードを返すまで、交互に処理を行います。 処理プロシージャーは、セグメント処理の最後を示す、まだゼロに設定された XML-CODE をパーサーに返します。
INFILE:
<?xml version='1.0'?> <Tagline> COBOL is the language of the future! </Tagline>
プログラム:
Identification division.
Program-id. PARSESEG.
Environment division.
Input-output section.
File-control.
Select Input-XML
Assign to infile
File status is Input-XML-status.
Data division.
File section.
FD Input-XML
Record is varying from 1 to 255 depending on Rec-length
Recording mode V.
1 fdrec.
2 pic X occurs 1 to 255 depending on Rec-length .
Working-storage section.
1 Event-number comp pic 99.
1 Rec-length comp-5 pic 9(4).
1 Input-XML-status pic 99.
Procedure division.
Open input Input-XML
If Input-XML-status not = 0
Display 'Open failed, file status: ' Input-XML-status
Goback
End-if
Read Input-XML
If Input-XML-status not = 0
Display 'Read failed, file status: ' Input-XML-status
Goback
End-if
Move 0 to Event-number
Display 'Starting with: ' fdrec
Display 'Event number and name Content of XML-text'
XML parse fdrec processing procedure Handle-parse-events
Close Input-XML
Goback
.
Handle-parse-events.
Add 1 to Event-number
Display ' ' Event-number ': ' XML-event '{' XML-text '}'
Evaluate XML-event
When 'END-OF-INPUT'
Read Input-XML
Evaluate Input-XML-status
When 0
Move 1 to XML-code
Display 'Continuing with: ' fdrec
When 10
Display 'At EOF; no more input.'
When other
Display 'Read failed, file status:' Input-XML-status
Goback
End-evaluate
When other
Continue
End-evaluate
.
End program PARSESEG.
結果:
Starting with: <?xml version='1.0'?>
Event number and name Content of {XML-TEXT}
01: START-OF-DOCUMENT {}
02: VERSION-INFORMATION {1.0}
03: END-OF-INPUT {}
Continuing with: <Tagline>
04: START-OF-ELEMENT {Tagline}
05: END-OF-INPUT {}
Continuing with: COBOL is the language of the future!
06: CONTENT-CHARACTERS {COBOL is the language of the future!}
07: END-OF-INPUT {}
Continuing with: </Tagline>
08: CONTENT-CHARACTERS {}
09: END-OF-ELEMENT {Tagline}
10: END-OF-DOCUMENT {}