Синтаксический анализ XML Микрофокуса в переменных 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 тега. Что я хочу сделать, это шаг за шагом прочитать этот 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, а не первого.

Я хотел бы помочь в этом.

1 ответ

  1. Можно использовать синтаксис «XML parse» :

       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.