COBOL2002 XML連携機能ガイド


5.2 XMLドキュメントの書き込み

XMLドキュメントへデータを書き込むには,次のような手順のCOBOLプログラムを作成します。

  1. XML要素を書き込むために,cblxmlコマンドで生成されたXMLアクセス用データ定義をCOPY文で取り込む

  2. CBLXML-OB-Interfaceアクセスルーチンを呼び出し,XMLドキュメントを定義しているメモリ領域を開く

  3. XML要素に書き込むためのデータを作成する

  4. CBLXML-WR-Interface-BaseElementアクセスルーチンを呼び出し,COBOLデータ項目から対応するXML要素にデータを書き込む

  5. CBLXML-CL-Interfaceアクセスルーチンを呼び出し,XMLドキュメントを閉じる

  6. プログラムを終了する

(a) XMLドキュメントの書き込みのコーディング例

メモリ上のXMLドキュメントへデータを書き込むプログラムのコーディング例を,次に示します。なお,このコーディング例が対象にしているDTD,DDFについては,「5.1(a) DTD,DDFの例」を参照してください。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. WRITESAMPLE.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
         COPY 'subprog-COPY.cbl'.
       01 BUFFER USAGE POINTER VALUE NULL.
       01 BUFFER-DATA PIC X(500).
       01 BUFFER-LENGTH PIC 9(9) COMP VALUE 500.
       01 BUFFER-MODE PIC X(16).
       01 XML-POINTER USAGE POINTER.
       01 XML-ERROR-CODE PIC 9(9) COMP VALUE 0.
       PROCEDURE DIVISION.
      *    プログラム開始
           DISPLAY ' COBOL Data Types - WRITE'.
 
      *    XMLドキュメントを入力するための
      *    オープンモードを'WRITE'に設定
           MOVE 'W' TO BUFFER-MODE.
 
      *    XMLドキュメントを開く
           PERFORM OPEN-BUFFER.
 
      *    row要素の値を初期化
           MOVE SPACES TO ROW.
 
 
           DISPLAY '      *****    Write 1st Row    *****'.
 
           MOVE 'John Smith'   TO FULL-NAME.
           MOVE 20             TO AGE.
           MOVE 'Irvine'       TO CITY.
 
      *    row要素の値をXMLドキュメントに出力する
           PERFORM WRITE-BUFFER.
 
 
           DISPLAY '      *****    Write 2nd ROW    *****'.
 
           MOVE 'Jane Doe'     TO FULL-NAME.
           MOVE 30             TO AGE.
           MOVE 'Los Angeles'  TO CITY.
 
      *    row要素の値をXMLドキュメントに出力する
           PERFORM WRITE-BUFFER.
 
 
           DISPLAY '      *****    Write 3rd ROW    *****'.
 
           MOVE 'Tim Johnson'  TO FULL-NAME.
           MOVE 100            TO AGE.
           MOVE 'San Diego'    TO CITY.
 
      *    row要素の値をXMLドキュメントに出力する
           PERFORM WRITE-BUFFER.
 
 
      *    XMLドキュメントを閉じる
           PERFORM CLOSE-BUFFER.    
           STOP RUN.
 
 
      * XMLアクセスルーチン(メモリ空間を開く)
       OPEN-BUFFER.
           COMPUTE BUFFER = FUNCTION ADDR(BUFFER-DATA).
           CALL 'CBLXML-OB-EXAMPLE'
               USING BUFFER BUFFER-LENGTH
                     BUFFER-MODE XML-POINTER
               RETURNING XML-ERROR-CODE.
 
           IF XML-ERROR-CODE NOT EQUAL 0
               MOVE XML-ERROR-CODE TO RETURN-CODE
               DISPLAY
              'Failed to open XML document (open) - Error '
                   XML-ERROR-CODE
               GO TO ENDOFPROGRAM
           END-IF.
 
      * XMLアクセスルーチン(出力する)
       WRITE-BUFFER.
           CALL 'CBLXML-WR-EXAMPLE-row'
               USING XML-POINTER ROW
               RETURNING XML-ERROR-CODE.
 
           IF XML-ERROR-CODE NOT EQUAL 0
               MOVE XML-ERROR-CODE TO RETURN-CODE
               DISPLAY
                   'Failed write base element - Error '
                   XML-ERROR-CODE
                   GO TO ENDOFPROGRAM
           END-IF.
 
      * XMLアクセスルーチン(閉じる)
       CLOSE-BUFFER.
           CALL 'CBLXML-CL-EXAMPLE'
               USING XML-POINTER
               RETURNING XML-ERROR-CODE.
 
           IF XML-ERROR-CODE NOT EQUAL 0
               MOVE XML-ERROR-CODE TO RETURN-CODE
               DISPLAY
                   'Failed to close XML document - Error '
                   XML-ERROR-CODE
               GO TO ENDOFPROGRAM
           END-IF.
 
       ENDOFPROGRAM.
           STOP RUN.
 
       END PROGRAM WRITESAMPLE.