Использование зарезервированных имен коболов в выводе xml - PullRequest
4 голосов
/ 28 февраля 2020

Я работаю над проектом, в котором я буду читать файл xml с диска, созданного системой мэйнфреймов cobol. Я хочу указать c строку именования в этом xml файле, например:

<Orders>
 <Order>
  <Data>
   ...
  </Data>
 </Order>
 <Order>
  <Data>
   ...
  </Data>
 </Order>
 <Order>
  <Data>
   ...
  </Data>
 </Order>
</Orders>

Проблема, с которой я столкнулся при использовании этой структуры имен от моего разработчика cobol, заключается в том, что "Порядок" и "Данные" зарезервированные имена в cobol, поэтому он говорит, что они не могут быть использованы. Действительно ли это так, или кто-то может указать нам направление, в котором наш вывод xml может быть чем угодно, когда cobol создает файл xml?

1 Ответ

7 голосов
/ 28 февраля 2020

IBM Enterprise COBOL имеет оператор XML GENERATE, который используется для генерации XML из структур данных COBOL. Сгенерированные имена тегов по умолчанию являются именами элементов данных в структуре. Имя элемента данных не может быть зарезервированным словом COBOL.

Начиная с версии 5 IBM Enterprise COBOL существует механизм генерирования имен тегов для элементов данных, которые являются , а не именем элемент данных. Это фраза NAME оператора XML GENERATE.

Структура, которая выглядит следующим образом ...

01  WS-ORDERS.
    05  WS-ORDER OCCURS 2.
        10  WS-DATA    PIC X(4096).

..., обработанная с помощью XML GENERATE, обычно приводит к ...

<WS-ORDERS><WS-ORDER><WS-DATA>...</WS-DATA></WS-ORDER><WS-ORDER><WS-DATA>...</WS-DATA></WS-ORDER></WS-ORDERS>

... но использование фразы NAME ...

XML GENERATE WS-BUFFER FROM WS-ORDERS
  NAME WS-ORDERS 'ORDERS'
       WS-ORDER  'ORDER'
       WS-DATA   'DATA'
END-XML

... должно дать вам то, что ты хочешь. Это просто от руки, но я думаю, что вы можете понять идею.

Возможно, ваш компилятор COBOL не был обновлен до версии, которая поддерживает фразу NAME XML GENERATE. Последняя такая версия - 4.2, которая выходит из строя 30-Sep-2021 .

...