0

我需要从复杂的 COBOL 结构(大型机)生成 xml 文件。我不能使用 XML GENERATE cobol 函数,因为数据树太大而无法放入 WS(大约 8 个嵌套数组,每个数组大约出现 75 个 30 字节),因此没有一个组项可以传递给 xml 生成函数.

我能想到的唯一选择是通过逐级遍历所需 adabas 表上的层次结构并填充文件来“手动”生成 xml,这个选项对我来说的问题是我不知道如何过去每次重新创建文件并“嵌套”下一个节点。

有没有更好的办法?

数据来自 ADABAS 表,我也可以使用自然表,是否有更好的使用自然表的解决方案?据我所知,自然不允许嵌套超过 3 层,这对我来说是个问题。

谢谢!

4

4 回答 4

1

我无法给出肯定的答案;一些评论:

  • 一个大的 XML结构是唯一的方法吗???大多数 Xml 实用程序都难以应对这种单一的 XML。
  • XML 流解决方案将比一次性编写完整的 XML 结构更好/更易于维护。
  • 您是否看过诸如XML Thunder 之类的商业实用程序,从记忆中还有其他的。我无法评论它们有多好,它们花了多少钱。

我用 Java 编写了一个Cobol to XML 实用程序。它需要一个 Cobol 数据文件 + 一个 Cobol Copybook 并将其转换为 XM。该实用程序允许您在不同的 Cobol-Records 之间定义层次结构,因此您可以使用“嵌套”Cobol-Records 代替嵌套数组。我的Cobol to XML 实用程序可能会因字帖的大小而烦恼。但是这种实用程序相当容易编写。


通过以下方式将我的Cobol 复制到 Xml实用程序应该相当容易

  • 生成一个 Cobol 程序以从 Cobol Copybook 编写 Xml(以流方式)
  • 编写一个通用的 Cobol 文件 ==> Xml 程序。

对于任何一种解决方案,我都会使用Cobol-Copybook的格式化版本,例如

  • Cobol 编译器生成的 Field-Map。
  • 文件辅助字帖列表
  • cb2xml如果使用脚本语言生成 Cobol 程序

答案与您的问题无关,但它确实演示了可以从 Cobol Copybook 生成的内容。在这种情况下,他生成:

  • 来自二进制抄写本的文本 Cobol 抄写本
  • 将二进制索引文件转换为平面文本文件的代码
  • 生成数据库的 VBA 代码
  • 用于在数据库中加载 Cobol-Data 文件的 VBA 代码
于 2016-08-25T11:05:44.500 回答
0

Redvers COBOL XML 接口使用迭代点和对生成器子例程的多次调用来处理非常大和复杂的字帖。您会将一组初始数据移动到字帖,CALL,然后移动下一组数据并再次 CALL。XML 输出显然将是一个非常大的字符串,但您也可以将其卸载为可管理的块。

于 2017-01-18T12:54:31.687 回答
0

我刚刚为客户做了这样的事情。显然我无法在这里发布他们的代码,但也许是我们所做工作的概述......

首先,我们创建了一个类似 JSON 的结构:一个包含 3 个字段的 Natural X-Array Group:

nson         (1:*)  /* X-Array
level-number (I1)
tag-name     (A) DYNAMIC
tag-value    (A) DYNAMIC

(我们使用 -ve level-number 来表示 - 0:n - XML-Attributes 用于前面的 +ve 级别)

为了填充 X 数组,我们使用了来自自然子程序和自然外部子程序(使用按值调用和可选参数)的全局数据区域以及用于典型数据转换的一些自然函数(例如打包或日期变量到字符串)

结果是类似于 XML 的自然代码,例如:

perform XML-at   2  'node-name'                      /* ABSOLUTE Level
perform XML-this    'tag-name'          'tag-value'  /* Relative Level
perform XML-this    'node-name'                      /* Relative Level
perform XML-next        'tag-name'      'tag-value'  /* Relative Level
perform XML-prev    'tag-name'      P3(<-17.123>)    /* Relative Level & Function for (Pnn.3)

然后我们通过 Natural-RPC 将其发布到 Java 服务,该服务从中构建 XML。
(在我们的例子中,我们使用了 XML 服务器端,但您可以将它返回给 Natural 在一个 DYNAMIC 变量中)

于 2020-08-02T09:01:12.770 回答
0

所以有两个想法:

  • 如有必要,让您的代码“手动生成”XML。
  • 如果可能的话,把你的树分解成子树。
于 2016-08-25T09:07:53.443 回答