Разбор XML Micro Focus в переменных COBOL

У меня есть следующая xml-структура, которую я хочу проанализировать в Cobol.

<LDO>
  <OD>1</OD>     //OD 1'st occurrence
  <OLD>1</OLD>    //OLD 1'st occurrence
  <OLD>2</OLD>    //OLD 2'nd occurrence
  <OLD>3</OLD>    //OLD 3'rd occurrence
  <OD>2</OD>     //OD 2'nd occurrence
  <OLD>4</OLD>    //OLD 4'th occurrence
</LDO>

Как видите, после тега OD есть несколько тегов OLD. Что я хочу сделать, так это прочитать этот xml-файл шаг за шагом и отобразить его атрибуты следующим образом:

1 1 2 3 2 4

           READ xml-stream.
       START xml-stream KEY IS OD.

       *>check status

       START xml-stream KEY IS OLD.
       *> check stream status                 

       PERFORM UNTIL EXIT
            READ xml-stream next key is
            old
            IF  stream-status = -7
               EXIT PERFORM
            END-IF
            *> check stream status less than 0
            display od-value
            display old-value             

Но значение od не меняется, когда я запускаю программу. Он возвращает следующие значения

1 1 2 3 1 4

Я хочу, чтобы второе вхождение возвращало значение второго элемента OD, а не первого.

Я хотел бы помочь в достижении этого.


person Mnemonics    schedule 07.10.2016    source источник


Ответы (1)


Вы можете использовать "xml синтаксис разбора":

   program-id. xp.
   01 xdoc pic x(1024) value
   " <LDO>" &
    "  <OD>1</OD>" &
    "  <OLD>1</OLD>" &
    "  <OLD>2</OLD>" &
    "  <OLD>3</OLD>" &
    "  <OD>2</OD>" &
    "  <OLD>4</OLD>" &
    "</LDO>".

   procedure division.
        Xml parse xdoc processing procedure p
            ON EXCEPTION
              display 'XML document error 'XML-CODE
          NOT ON EXCEPTION
              display 'XML document successfully parsed'
          END-XML
        goback.

         p.
            Evaluate xml-event
                When 'START-OF-ELEMENT'
                When 'CONTENT-CHARACTERS'
                  exhibit named xml-text
                When 'CONTENT-CHARACTER'
                  exhibit named xml-text
                When 'END-OF-ELEMENT'
                  exhibit named xml-event
                When other
                  exhibit named xml-event
        End-evaluate
        .


   end program xp.
person Stephen Gennard    schedule 20.10.2016