我正在尝试使用GENERATE语句在COBOL中制作XML文件。到目前为止,一切都很好。但是对于这种特定的xml,它需要在其中包含一个单独的xml文件。所以我想在它周围使用CDATA标签。但是,有没有一种方法可以在COBOL中使用GENERATE语句来做到这一点?
这里举个例子。
01 request.
06 route.
11 name PIC X(030).
11 version PIC 9(004).
06 question.
11 IDENT PIC 9(009).
11 xmlFileName PIC X(006).
11 xmlFileInh PIC X(5000).
xmlFileInh需要用另一个XML文件填充。这只能是xml或soap请求。
类似这样的东西:
<?xml version="1.0" encoding="UTF-8"?>
<request>
<route>
<name>serviceRequest</name>
<version>1</version>
</route>
<question>
<IDENT>111111111</IDENT>
<xmlFileName>FILE-1</xmlFileName>
<xmlFileInh>
<![CDATA[<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope.....<SOAP-ENV:Envelope]]>
</xmlFileInh>
</question>
</request>
我已经尝试将"<![CDATA[" and "]]>"
紧紧围绕传入的XML文件,然后将其放在xmlFileInh中。这可以执行某些操作,但是会将所有HTML控件字符呈现为我不需要的xml文件中的某些内容。 GENERATE语句对CDATA无效。
< becomes <
> becomes >
" becomes "
' becomes '
& becomes &
我还尝试给xmlFileInh提供另一张图片,甚至输入XML。这在我的XML中提供了许多新的标签,名称长度和数据长度等,但是我不需要。
有人有解决方案吗?
谢谢Martijn。
IBM的Enterprise COBOL当前没有任何选项来处理生成CDATA。
要解决您的问题,您可以不填充xmlFileInh,然后将XML生成为SOME-BUFFER,然后...
UNSTRING
SOME-BUFFER
DELIMITED '<xmlFileInh>' OR '</xmlFileInh>'
INTO
FIRST-PART COUNT IN FIRST-PART-COUNT
DELIMITER IN FIRST-DELIMITER
SECOND-PART
DELIMITER IN SECOND-DELIMITER
THIRD-PART COUNT IN THIRD-PART-COUNT
END-UNSTRING
...然后...
STRING
FIRST-PART(1:FIRST-PART-COUNT) DELIMITED SIZE
FIRST-DELIMITER DELIMITED SPACE
CDATA-CONTENT DELIMITED ']]>'
']]>' DELIMITED SIZE
SECOND-DELIMITER DELIMITED SPACE
THIRD-PART(1:THIRD-PART-COUNT) DELIMITED SIZE
INTO FINAL-DESTINATION
END-STRING
...我刚刚徒手,所以不能保证。从美学上来说,它也是令人不快的,应该有人向IBM提交RFE以处理XML GENERATE中的CDATA。