Отобразить объект IF_IXML_ELEMENT через DISPLAY_XML_DOCUMENT - PullRequest
2 голосов
/ 13 марта 2019

У меня есть программа, которая отображает XML-документ через функциональный модуль DISPLAY_XML_DOCUMENT:

DATA(xml_document) = new cl_xml_document( ).
xml_document->parse_string( `<ROOT><city><name>Paris</name>` &&
        `<country><name>France</name><iso>FRA</iso></country>` &&
        `</city></ROOT>` ).

" Display the whole document
CALL FUNCTION 'DISPLAY_XML_DOCUMENT'
  EXPORTING
    xml_document = xml_document
  EXCEPTIONS
    OTHERS       = 1.

" Extract the country name and ISO code

DATA(element) = CAST if_ixml_element(
            xml_document->find_node( name = '/ROOT/city/country' ) ).

" Display the whole document
CALL FUNCTION 'DISPLAY_XML_DOCUMENT'
  EXPORTING
    xml_document = element
  EXCEPTIONS
    OTHERS       = 1.

При первом вызове функционального модуля DISPLAY_XML_DOCUMENT отображается весь XML-документ:

enter image description here

Затем объект element инициализируется с помощью <country><name>France</name><iso>FRA</iso></country>.Он имеет тип IF_IXML_ELEMENT.

Увы, отображение элемента выдает ошибку времени выполнения CX_SY_DYN_CALL_ILLEGAL_TYPE , поскольку ожидается объект типа CL_XML_DOCUMENT_BASE, а не элемент типа IF_IXML_ELEMENT.

Как отобразить объект element через DISPLAY_XML_DOCUMENT?

1 Ответ

2 голосов
/ 14 марта 2019

Присоедините элемент к новому пустому экземпляру XML-документа следующим образом:

DATA(new_xml_document) = new cl_xml_document_base( ).
new_xml_document->create_with_node( element ).

CALL FUNCTION 'DISPLAY_XML_DOCUMENT'
  EXPORTING
    xml_document = new_xml_document
  EXCEPTIONS
    OTHERS       = 1.

Вот результат:

enter image description here

...