cobol xml parse got exception

use*_*100 2 xml cobol exception zos

cobol xml parse throws exception +000528897

reading xml from a file or even xml declared in "working storage" as a string array

The cobol parse command:

XML PARSE XML-STRING PROCEDURE XML-HANDLER

throws exception +000528897

I checked if the xml is well formed (display in browser) and it's ok

在此处输入图片说明

I displayed the xml string after reading it from a file and concatenating all the lines as a long string

在此处输入图片说明

we are using cobol 5.2

compiler option -> xmlparse(xmlss)

if i change the option to xmlparse(compat) the exception is 72

this is the cobol source

 IDENTIFICATION DIVISION.

   PROGRAM-ID. TDXMLTST.

   ENVIRONMENT DIVISION.

   INPUT-OUTPUT SECTION.

  *************************

   FILE-CONTROL.

       SELECT  XMLDATA       ASSIGN TO XMLFILE.

   DATA DIVISION.

   FILE SECTION.

  *=================================================================

   FD  XMLDATA

       RECORDING MODE IS F

       LABEL RECORD STANDARD

       DATA RECORD IS XMLREC.

   01  XMLREC   PIC X(80).





    WORKING-STORAGE SECTION.

  ******************************************************************

  * XML DOCUMENT, ENCODED AS INITIAL VALUES OF DATA ITEMS.         *

  ******************************************************************

   01 NOT-EOF                   PIC X(01)      VALUE 'N'.

   01 I-FROM                    PIC S9(4)   COMP VALUE 0.

   01 XML-STRING                PIC X(1000) VALUE SPACES.

   01 EZ-PTR                    PIC S9(4) COMP VALUE 1.



  ******************************************************************

  ******************************************************************

  * SAMPLE DATA DEFINITIONS FOR PROCESSING NUMERIC XML CONTENT.    *

  ******************************************************************

     1 CURRENT-ELEMENT PIC X(30).

     1 LIST-PRICE COMPUTATIONAL PIC 9V99 VALUE 0.

     1 DISCOUNT COMPUTATIONAL PIC 9V99 VALUE 0.

     1 DISPLAY-PRICE PIC $$9.99.

   PROCEDURE DIVISION.

    MAINLINE SECTION.

       PERFORM READ-XML-FILE

       DISPLAY 'XML-DOCUMENT=' XML-STRING(1:EZ-PTR)

       XML PARSE XML-STRING(1:EZ-PTR)

                          PROCESSING PROCEDURE XML-HANDLER

         ON EXCEPTION

           DISPLAY 'XML DOCUMENT ERROR ' XML-CODE

         NOT ON EXCEPTION

           DISPLAY 'XML DOCUMENT SUCCESSFULLY PARSED'

       END-XML

  ******************************************************************

  *    PROCESS THE TRANSFORMED CONTENT AND CALCULATE PROMO PRICE.  *

  ******************************************************************

       DISPLAY ' '

       DISPLAY '-----+++++***** USING INFORMATION FROM XML '

           '*****+++++-----'

       DISPLAY ' '

       MOVE LIST-PRICE TO DISPLAY-PRICE

       DISPLAY '  SANDWICH LIST PRICE: ' DISPLAY-PRICE

       COMPUTE DISPLAY-PRICE = LIST-PRICE * (1 - DISCOUNT)

       DISPLAY '  PROMOTIONAL PRICE:   ' DISPLAY-PRICE

       DISPLAY '  GET ONE TODAY!'

       GOBACK.

    MAINLINE-EXIT. EXIT.



   READ-XML-FILE  SECTION.

       OPEN INPUT XMLDATA



       PERFORM UNTIL NOT-EOF = 'Y'

            READ XMLDATA

              AT END MOVE 'Y' TO NOT-EOF

            END-READ

            IF NOT-EOF = 'N' THEN

              PERFORM VARYING I-FROM

                     FROM 72

                       BY -1

                    UNTIL XMLREC(I-FROM:1) NOT = ' '

              END-PERFORM



              STRING XMLREC(1:I-FROM) DELIMITED BY SIZE

                INTO XML-STRING

                WITH POINTER EZ-PTR

              END-STRING

              DISPLAY 'EZ-PTR=' EZ-PTR



            END-IF

       END-PERFORM



       CLOSE XMLDATA

       .

   READ-XML-FILE-EXIT. EXIT.



   XML-HANDLER SECTION.

       DISPLAY 'XML-EVENT=' XML-EVENT

       EVALUATE XML-EVENT

  * ==> ORDER XML EVENTS MOST FREQUENT FIRST

         WHEN 'START-OF-ELEMENT'

           DISPLAY 'START ELEMENT TAG: <' XML-TEXT '>'

           MOVE XML-TEXT TO CURRENT-ELEMENT

         WHEN 'CONTENT-CHARACTERS'

           DISPLAY 'CONTENT CHARACTERS: <' XML-TEXT '>'

  * ==> TRANSFORM XML CONTENT TO OPERATIONAL COBOL DATA ITEM...

           EVALUATE CURRENT-ELEMENT

             WHEN 'LISTPRICE'

  * ==> USING FUNCTION NUMVAL-C...

               COMPUTE LIST-PRICE = FUNCTION NUMVAL-C(XML-TEXT)

             WHEN 'DISCOUNT'

               COMPUTE DISCOUNT = FUNCTION NUMVAL-C(XML-TEXT)

           END-EVALUATE

         WHEN 'END-OF-ELEMENT'

           DISPLAY 'END ELEMENT TAG: <' XML-TEXT '>'

           MOVE SPACES TO CURRENT-ELEMENT

         WHEN 'START-OF-DOCUMENT'

           COMPUTE XML-DOCUMENT-LENGTH = FUNCTION LENGTH(XML-TEXT)

           DISPLAY 'START OF DOCUMENT: LENGTH=' XML-DOCUMENT-LENGTH

               ' CHARACTERS.'

       WHEN 'END-OF-DOCUMENT'

           DISPLAY 'END OF DOCUMENT.'

         WHEN 'VERSION-INFORMATION'

           DISPLAY 'VERSION: <' XML-TEXT '>'

         WHEN 'ENCODING-DECLARATION'

           DISPLAY 'ENCODING: <' XML-TEXT '>'

         WHEN 'STANDALONE-DECLARATION'

           DISPLAY 'STANDALONE: <' XML-TEXT '>'

         WHEN 'ATTRIBUTE-NAME'

           DISPLAY 'ATTRIBUTE NAME: <' XML-TEXT '>'

         WHEN 'ATTRIBUTE-CHARACTERS'

           DISPLAY 'ATTRIBUTE VALUE CHARACTERS: <' XML-TEXT '>'

         WHEN 'ATTRIBUTE-CHARACTER'

           DISPLAY 'ATTRIBUTE VALUE CHARACTER: <' XML-TEXT '>'

         WHEN 'START-OF-CDATA-SECTION'

           DISPLAY 'START OF CDATA: <' XML-TEXT '>'

         WHEN 'END-OF-CDATA-SECTION'

           DISPLAY 'END OF CDATA: <' XML-TEXT '>'

         WHEN 'CONTENT-CHARACTER'

           DISPLAY 'CONTENT CHARACTER: <' XML-TEXT '>'

         WHEN 'PROCESSING-INSTRUCTION-TARGET'

           DISPLAY 'PI TARGET: <' XML-TEXT '>'

         WHEN 'PROCESSING-INSTRUCTION-DATA'

           DISPLAY 'PI DATA: <' XML-TEXT '>'

         WHEN 'COMMENT'

           DISPLAY 'COMMENT: <' XML-TEXT '>'

         WHEN 'EXCEPTION'

  *         COMPUTE XML-DOCUMENT-LENGTH = FUNCTION LENGTH (XML-TEXT)

           DISPLAY 'EXCEPTION ' XML-CODE ' AT OFFSET '

               EZ-PTR '.'

           MOVE -1 TO XML-CODE

           MOVE 16 TO RETURN-CODE

         WHEN OTHER

           DISPLAY 'UNEXPECTED XML EVENT: ' XML-EVENT '.'

       END-EVALUATE

       .

   XML-HANDLER-EXIT. EXIT.                               
Run Code Online (Sandbox Code Playgroud)

XML DOCUMENT ERROR +000528897

csc*_*eid 5

您有CCSID问题,可以通过以下任一方法解决...

  • CODEPAGE(1140)通过商店中接受的任何一种方法来添加您的编译选项
  • ENCODING 1140短语添加到XML PARSE语句

使用XMLPARSE(COMPAT)编译选项(“本地COBOL”解析器)时,XML-CODE值72被记录为...

实际的文档编码为EBCDIC,CODEPAGE编译器选项未指定受支持的EBCDIC代码页,并且文档不包含编码声明。

当使用XMLPARSE(XMLSS)编译选项(z / OS XML System Services解析器)时,XML-CODE值是XML Return Code和XML Reason Code 的串联,每个都是半字。十进制+000528897为x'81201',因此XML原因码为1201,XML返回码为8。返回码8被记录为“ XRC_FAILURE”,并带有注释...

处理失败。返回的数据区和参数有效。

...原因码1201被记录为...

XRSN_PARM_ENCODING_SPEC_INVALID不支持传递的ccsid。操作:调用GXL1INI或GXL4INI的CCSID参数不是受支持的字符编码之一。仅传递允许的CCSID参数。有关受支持的ccsid常量,请参见GXL1INI服务的文档。

还要注意,编译器的服务终止日期为 2020年4月30日,距离现在不到一年。