如果我有这样的COBOL结构:
(结构应该是这样的,因为我必须用XML Generate Function
转换它,变量名只是样本)
01. MyData.
02. Corp-Entity
03. Corp-Branch1.
04. Address.
05. AddressLine1 PIC X(20).
05. AddressLine2 PIC X(20).
05. PostalCode PIC 9(05).
04. PIC-Entity.
05. Address.
06. AddressLine1 PIC X(20).
06. AddressLine2 PIC X(20).
06. PostalCode PIC 9(05).
如何在05. AddressLine1
中移动值?
如果我写这段代码:
move valueAddressLine1 to AddressLine1
in Address
in Corp-Brach1
in MyData
但此代码对06. AddressLine1
有效
move valueAddressLine1 to AddressLine1
in Address
in PIC-Entity
错误消息:">PIC 实体地址的地址行 1"不是唯一定义的名称。无法
从上下文中确定要使用的定义。 对名称的引用已被丢弃。
前注:
- 由于级别数字之后的句点,该代码将不起作用,请删除这些。
- 要拥有唯一的名称,您不需要完整的资格。例如,以下内容就可以了:
move valueAddressLine1 to AddressLine1
in PIC-Entity
答:
在这种情况下:通过使用可以唯一访问的名称来"修复"COBOL 端,在大多数情况下,可以通过其"父"项访问,并且不可能像您的04 Address
那样使用不同的名称(例如04 corp-address
)。
由于您希望在XML中具有此结构,因此您可以使用NAME
短语,因为IBM的文档XML元素名称和属性名称形成说:
在从标识符 2生成的 XML 文档中,XML 元素名称和属性名称是从
NAME
短语(如果指定)获取的;否则,它们派生自标识符 2 指定的数据项的名称以及从属于标识符 2的任何合格数据名称。
IBM 关于 XML GENERATE 语句的文档对此有详细说明。对于给定的样本并假设有 2 个公司分支:
XML GENERATE variable-name
FROM Corp-Entity
NAME OF corp-address in corp-branch1 IS 'Address'
corp-address in corp-branch2 IS 'Address'