Skip to Content

Hi,

Below is the code snippet that can be referred to parse XML document into an internal table of the ABAP program. We would need to pass XML document as a string type to the function module.

FUNCTION z_parse_xml.

*”———————————————————————-

*”*”Local Interface:

*”  IMPORTING

*”     REFERENCE(XML_DATA) TYPE  STRING

*”  TABLES

*”      ITAB

*”  EXCEPTIONS

*”      EXCEPTION

*”———————————————————————-

  DATA: l_xml_doc TYPE REF TO cl_xml_document,

        lv_subrc TYPE sysubrc,

        l_node TYPE REF TO if_ixml_node,

        l_iterator TYPE REF TO if_ixml_node_iterator,

        lv_nodetype TYPE i,

        lv_name TYPE string,

        lv_value TYPE string,

        lv_char TYPE char2.

  FIELDSYMBOLS: <fs_area> TYPE ANY.

***Create XML document using XML data

  CREATE OBJECT l_xml_doc.

  lv_subrc = l_xml_doc->parse_string( xml_data ).

  IF lv_subrc IS NOT INITIAL.

    MESSAGE e001(00) WITH ‘Error in XML document’ RAISING exception.

    EXIT.

  ENDIF.

***Create node to get data from XML document

  l_node = l_xml_doc->m_document.

  IF l_node IS INITIAL.

    MESSAGE e001(00) WITH ‘Error in XML document’ RAISING exception.

    EXIT.

  ENDIF.

***Create iterator to loop through nodes

  l_iterator = l_node->create_iterator( ).

  l_node = l_iterator->get_next( ).

***Loop through all the nodes in the XML document

  WHILE NOT l_node IS INITIAL.

    lv_nodetype = l_node->get_type( ).

    CASE lv_nodetype.

***XML tag name

      WHEN if_ixml_node=>co_node_element.

***Get tag name

        lv_name = l_node->get_name( ).

***Get value of the XML tag

      WHEN if_ixml_node=>co_node_text OR if_ixml_node=>co_node_cdata_section.

        lv_value = l_node->get_value( ).

        MOVE lv_value TO lv_char.

        IF lv_char NE cl_abap_char_utilities=>cr_lf.

          ASSIGN lv_value TO <fs_area>.

        ENDIF.

      WHEN OTHERS.

        “Do nothing

    ENDCASE.

    l_node = l_iterator->get_next( ).

  ENDWHILE.

***Append the row to the internal table

  APPEND <fs_area> TO itab.

ENDFUNCTION.

The function module will thus give us the parsed data which can be further used for processing.

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply