Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 プログラミング・ガイド


例: XML 文書を 1 セグメントずつ構文解析

下のサンプル・プログラムでは、XML 文書の 1 セグメントずつの構文解析を示します。 例では、ファイルの XML コンテンツ、XML テキストを読み取りパーサーに送信するプログラム、および入力レコードを構文解析した結果の一連のイベントが示されています。

この機能を使用するには、XMLPARSE(XMLSS)コンパイラー・オプションを有効にしてプログラムをコンパイルする必要があります。

サンプル・プログラムでは、XML 文書のレコード (セグメント) をファイル (INFILE) から読み取り、 そのレコードをパーサーに XML PARSE ステートメントを使用して渡しています。 パーサーは、XML イベントごとに XML を処理して処理プロシージャーに制御を渡します。 処理プロシージャーがイベントを処理し、パーサーに返します。

セグメントの最後で、パーサーは XML-EVENTEND-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        {} 

ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)