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源
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
发布于 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服务的文档。
https://stackoverflow.com/questions/57290906
复制相似问题