首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cobol xml解析异常

Cobol xml解析异常
EN

Stack Overflow用户
提问于 2019-07-31 12:36:48
回答 1查看 949关注 0票数 2

Cobol解析抛出异常+000528897

将xml从“工作存储”中声明为字符串数组的文件或甚至xml中读取

Cobol解析命令:

XML PARSE XML-STRING PROCEDURE XML-HANDLER

抛出异常+000528897

我检查了xml是否有良好的格式(显示在浏览器中),并且没有问题。

在从文件中读取xml字符串并将所有行连接为长字符串之后,我显示了xml字符串。

我们用的是Cobol 5.2

编译器选项-> xmlss解析(Xmlss)

如果我将选项更改为xmlparse(compat),则异常为72。

这是Cobol源

代码语言:javascript
复制
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.                               

XML文档错误+000528897

EN

回答 1

Stack Overflow用户

发布于 2019-07-31 14:24:18

你有一个CCSID问题,可以通过.

  • 通过商店接受的任何方法将CODEPAGE(1140)添加到编译选项
  • ENCODING 1140短语添加到XML解析语句中

当使用XMLPARSE(COMPAT)编译选项(“本机COBOL”解析器)时,XML-代码值72是记录在案作为.

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

当使用XMLPARSE(XMLSS)编译选项( z/OS系统服务解析器)时,XML -代码值是XMLPARSE和XMLPARSE的串连,每个值都是半字。十进制+000528897为x'81201‘,因此XML原因代码为1201,XML返回代码为8。返回代码8为记录在案,为"XRC_FAILURE“,注释为.

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

...and原因代码1201是记录在案作为.

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57290906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档