Cobol xml 解析抛出异常 +000528897
从文件中读取 xml,甚至从“工作存储”中声明为字符串数组的 xml
Cobol 解析命令:
XML 解析 XML-STRING 过程 XML-HANDLER
抛出异常+000528897
我检查了 xml 格式是否正确(在浏览器中显示)并且没问题
我从文件中读取 xml 字符串并将所有行连接为长字符串后显示了该字符串
我们正在使用 Cobol 5.2
编译选项 -> xmlparse(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
最佳答案
您遇到了 CCSID 问题,可以通过以下任一方式解决...
- 通过您商店接受的任何方法将
CODEPAGE(1140)
添加到您的编译选项 - 将
ENCODING 1140
短语添加到 XML PARSE 语句
当使用 XMLPARSE(COMPAT) 编译选项(“ native COBOL”解析器)时,XML-CODE 值 72 为 documented作为...
The actual document encoding was EBCDIC, the CODEPAGE compiler option did not specify a supported EBCDIC code page, and the document did not contain an encoding declaration.
使用 XMLPARSE(XMLSS) 编译选项(z/OS XML System Services 解析器)时,XML-CODE 值为 concatenation XML 返回代码和 XML 原因代码,每个都是一个半字。十进制 +000528897 为 x'81201',因此 XML 原因代码为 1201,XML 返回代码为 8。返回代码 8 为 documented作为“XRC_FAILURE”并附注...
Processing failed. Returned data areas and parms valid.
...原因代码 1201 是 documented作为...
XRSN_PARM_ENCODING_SPEC_INVALID The ccsid passed is not supported. Action: The CCSID parameter on the call to GXL1INI or GXL4INI is not one of the supported character encodings. Pass only permitted CCSID parameters. See the documentation of the GXL1INI service for supported ccsid constants.
关于xml - Cobol xml 解析出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57290906/