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.