CBLXML-GET-NEXT-BEサービスルーチンは,入力または更新モードで開いたXMLドキュメントに対し,次に入力するBaseElement要素のXMLドキュメント上での位置情報を取得できます。位置情報は"/"文字を区切り文字としての階層で,ルート要素からBaseElement要素までを設定します。BaseElement要素が繰り返しである場合,繰り返し順序を示す"[番号]"が要素に付け加えられます。DTDで"*"または"+"によって繰り返しがあることが指定されている要素でも,XMLドキュメント中に1回しか現れない要素については,繰り返し順序を示す"[番号]"は付け加えられません。番号は1から開始し,2,147,483,647までです。番号の範囲を超えた場合は,保証しません。
/ルート要素/要素/BaseElement要素[番号]
引数のデータ型 | 指定 | 説明 |
---|---|---|
01 XML-POINTER USAGE POINTER. | ○ | XMLドキュメントのポインタを受け取るポインタ項目を指定する。 |
01 BE-LOCALE-BUFFER PIC X(n). | ○ | BaseElement要素の位置情報を受け取る領域を英数字項目で指定する。 |
01 BE-LOCALE-BUFFER-LENGTH PIC 9(9) COMP. | ○ | BaseElement要素の位置情報を受け取る領域の長さを4バイトの二進項目で指定する。 |
01 BE-LOCALE-LENGTH PIC 9(9) COMP. | △ | 受け取った位置情報の長さが設定される。この項目は4バイトの二進項目で指定する。 |
戻り値 | 内容 |
---|---|
3 | 次に入力するBaseElement要素がない。 |
2 | XMLドキュメントを開いていない状態で位置情報を取得した。または出力モードで開いたXMLドキュメントの位置情報を取得した。 |
1 | BaseElement要素の位置情報の長さが位置情報を受け取る領域の長さを超えた。 |
0 | 正常終了した。 |
-1 | CBLXML-GET-NEXT-BEサービスルーチンの引数の値が不正。 |
-2 | 操作を続けるためのメモリが不足した。 |
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE root [
<!ELEMENT root (group1 | group2 | group3)>
<!ELEMENT group1 (item1)>
<!ELEMENT group2 (item1)>
<!ELEMENT item1 (#PCDATA)>
<!ELEMENT group3 (item3)>
<!ELEMENT item3 (#PCDATA)>
]>
<root/>
<?xml version="1.0" encoding="Shift_JIS"?>
<Interface interfaceName="EXAMPLE">
<BaseElement elemName="item1">
<Item elemName="item1" size="10"/>
</BaseElement> <BaseElement elemName="item3">
<Item elemName="item3" size="10"/>
</BaseElement>
</Interface>
01 item1 PIC X(10).
01 item3 PIC X(10).
<?xml version="1.0" encoding="Shift_JIS"?>
<root>
<group3>
<item3>ABC</item3>
</group3>
</root>
:
01 CBLXML-RETURN-CODE PIC 9(9) COMP.
01 FILE-NAME PIC X(255).
01 XML-FILE-NAME USAGE POINTER.
01 XML-FILE-NAME-LENGTH PIC 9(9) COMP VALUE 255.
01 XML-MODE PIC X(16).
01 XML-POINTER USAGE POINTER.
01 BE-LOCALE-BUFFER PIC X(255).
01 BE-LOCALE-BUFFER-LENGTH PIC 9(9) COMP VALUE 255.
01 BE-LOCALE-LENGTH PIC 9(9) COMP VALUE 0.
PROCEDURE DIVISION.
START-MAIN.
:
* open
MOVE 'R' TO XML-MODE.
MOVE 'data.xml' TO FILE-NAME.
MOVE 8 TO XML-FILE-NAME-LENGTH.
COMPUTE XML-FILE-NAME = FUNCTION ADDR(FILE-NAME).
CALL 'CBLXML-OP-EXAMPLE'
USING XML-FILE-NAME
XML-FILE-NAME-LENGTH
XML-MODE
XML-POINTER
RETURNING CBLXML-RETURN-CODE.
IF CBLXML-RETURN-CODE NOT = 0 THEN
DISPLAY 'ERROR - CBLXML-OP-EXAMPLE, STATUS = '
CBLXML-RETURN-CODE
END-IF.
* read
CALL 'CBLXML-GET-NEXT-BE' …1.
USING XML-POINTER
BE-LOCALE-BUFFER
BE-LOCALE-BUFFER-LENGTH
BE-LOCALE-LENGTH.
IF RETURN-CODE = 0 THEN
IF BE-LOCALE-BUFFER = '/root/group1/item1' OR
BE-LOCALE-BUFFER = '/root/group2/item1' THEN
CALL 'CBLXML-RD-EXAMPLE-item1' …2.
USING XML-POINTER item1
RETURNING CBLXML-RETURN-CODE
IF CBLXML-RETURN-CODE NOT = 0 THEN
DISPLAY 'ERROR - READ item1, STATUS = '
CBLXML-RETURN-CODE
END-IF
DISPLAY 'BE-LOCALE-BUFFER = ' BE-LOCALE-BUFFER
DISPLAY 'item1 = ' item1
ELSE
IF BE-LOCALE-BUFFER = '/root/group3/item2' THEN
CALL 'CBLXML-RD-EXAMPLE-item3 …3.
USING XML-POINTER item3
RETURNING CBLXML-RETURN-CODE
IF CBLXML-RETURN-CODE NOT = 0 THEN
DISPLAY 'ERROR - READ item3, STATUS = '
CBLXML-RETURN-CODE
END-IF
DISPLAY 'BE-LOCALE-BUFFER = ' BE-LOCALE-BUFFER
DISPLAY 'item3 = ' item3
END-IF
END-IF.
* close
CALL 'CBLXML-CL-EXAMPLE'
USING XML-POINTER
RETURNING CBLXML-RETURN-CODE.
IF CBLXML-RETURN-CODE NOT = 0 THEN
DISPLAY 'ERROR - CBLXML-CL-EXAMPLE, STATUS = '
CBLXML-RETURN-CODE
END-IF.
: