COBOL使用CDATA生成XML文件

问题描述 投票:1回答:1

我正在尝试使用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   &lt;
> becomes   &gt;
" becomes   &quot;
' becomes   &apos;
& becomes   &amp;

我还尝试给xmlFileInh提供另一张图片,甚至输入XML。这在我的XML中提供了许多新的标签,名称长度和数据长度等,但是我不需要。

有人有解决方案吗?

谢谢Martijn。

xml cobol cdata generate
1个回答
0
投票

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。

© www.soinside.com 2019 - 2024. All rights reserved.