To parse the XML data into SAP Internal Tables, generally we write Transformation using TCode XSLT_TOOL and need to call that using CALL TRANSFORMATION keyword.
There is another way to do the same using FM: SMUM_XML_PARSE
In this tutorial, we will pick the XML file stored on Application server and parse that file in ITAB. File: Test_Man.xml is stored on Application server path: Test_Man.xml
Application Server File:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GMInfo>
#<SenderID>987654321</SenderID>
#<ReceiverID>RCV1111111</ReceiverID>
#<MessageID>MID2222222</MessageID>
#<MessageDateTime>20210112000401</MessageDateTime>
#<LineItem>
##<SupplierCode>1</SupplierCode>
##<GINo>90000000000001</GINo>
##<DeliveryNo>8000000001</DeliveryNo>
##<SKUNo>MAT001</SKUNo>
#</LineItem>
#<LineItem>
##<SupplierCode>2</SupplierCode>
##<GINo>90000000000002</GINo>
##<DeliveryNo>8000000002</DeliveryNo>
##<SKUNo>MAT002</SKUNo>
#</LineItem>
#<LineItem>
##<SupplierCode>3</SupplierCode>
##<GINo>90000000000003</GINo>
##<DeliveryNo>8000000003</DeliveryNo>
##<SKUNo>MAT003</SKUNo>
#</LineItem>
</GMInfo>
A mapping structure needs to be created in SE11 according to XML

Line type for Table type ZTT_GRAYMARKET_ITM is ZGRAYMARKET_ITM

Source Code:
DATA : _file_string TYPE xstring,
_t_xml_data TYPE TABLE OF smum_xmltb,
_t_return TYPE TABLE OF bapiret2,
_t_zgraymarketinfo TYPE STANDARD TABLE OF zgraymarketinfo,
_s_zgraymarketinfo TYPE zgraymarketinfo,
_t_gminfo_itm TYPE ztt_graymarket_itm,
_s_gminfo_itm TYPE zgraymarket_itm.
PARAMETERS : p_file TYPE rlgrap-filename.
START-OF-SELECTION.
* Open File
OPEN DATASET p_file FOR INPUT IN BINARY MODE.
IF sy-subrc IS INITIAL.
* Read file content
READ DATASET p_file INTO _file_string.
IF _file_string IS NOT INITIAL.
DATA(_o_xmldoc) = NEW cl_xml_document( ).
CALL METHOD _o_xmldoc->parse_xstring
EXPORTING
stream = _file_string
RECEIVING
retcode = DATA(_retcode).
IF _retcode IS INITIAL.
REFRESH : _t_xml_data[], _t_return[].
* Read XML Data
CALL FUNCTION 'SMUM_XML_PARSE'
EXPORTING
xml_input = _file_string
TABLES
xml_table = _t_xml_data
return = _t_return.
IF line_exists( _t_return[ type = 'E' ] ).
MESSAGE s208(00) WITH 'Error while parsing the file' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
DELETE _t_xml_data WHERE hier EQ 1.
* Populate Internal Tables
LOOP AT _t_xml_data ASSIGNING FIELD-SYMBOL(<fs_xml_data>).
IF <fs_xml_data>-hier EQ 2 AND <fs_xml_data>-type EQ 'V'.
ASSIGN COMPONENT <fs_xml_data>-cname OF STRUCTURE _s_zgraymarketinfo TO FIELD-SYMBOL(<fs_val>).
IF sy-subrc IS INITIAL AND <fs_val> IS ASSIGNED.
<fs_val> = <fs_xml_data>-cvalue.
ENDIF.
ELSEIF <fs_xml_data>-hier EQ 3 AND <fs_xml_data>-type EQ 'V'.
UNASSIGN <fs_val>.
ASSIGN COMPONENT <fs_xml_data>-cname OF STRUCTURE _s_gminfo_itm TO <fs_val>.
IF sy-subrc IS INITIAL AND <fs_val> IS ASSIGNED.
<fs_val> = <fs_xml_data>-cvalue.
ENDIF.
ELSEIF <fs_xml_data>-hier EQ 2 AND <fs_xml_data>-type IS INITIAL AND <fs_xml_data>-cname EQ 'LineItem'.
IF _s_gminfo_itm IS NOT INITIAL.
APPEND _s_gminfo_itm TO _t_gminfo_itm.
CLEAR : _s_gminfo_itm.
ELSE.
CONTINUE.
ENDIF.
ENDIF.
ENDLOOP.
* Append Last Row
IF _s_gminfo_itm IS NOT INITIAL.
APPEND _s_gminfo_itm TO _t_gminfo_itm.
CLEAR : _s_gminfo_itm.
ENDIF.
ELSE.
MESSAGE s208(00) WITH 'Wrong file format' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
CLOSE DATASET p_file.
IF _s_zgraymarketinfo IS NOT INITIAL.
_s_zgraymarketinfo-lineitem = _t_gminfo_itm[].
APPEND _s_zgraymarketinfo TO _t_zgraymarketinfo.
ENDIF.
REFRESH : _t_gminfo_itm[].
CLEAR : _s_zgraymarketinfo, _s_gminfo_itm.
ELSE.
MESSAGE s208(00) WITH 'Error while accessing the file' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
* Print Output
LOOP AT _t_zgraymarketinfo ASSIGNING FIELD-SYMBOL(<fs_zgraymarketinfo>).
WRITE : / 'senderid:', <fs_zgraymarketinfo>-senderid,
/ 'receiverid:', <fs_zgraymarketinfo>-receiverid,
/ 'messageid:', <fs_zgraymarketinfo>-messageid,
/ 'shipto:', <fs_zgraymarketinfo>-shipto,
/ 'messagedatetime:', <fs_zgraymarketinfo>-messagedatetime.
LOOP AT <fs_zgraymarketinfo>-lineitem ASSIGNING FIELD-SYMBOL(<fs_lineitem>).
WRITE : / 'suppliercode:', <fs_lineitem>-suppliercode,
/ 'gino:', <fs_lineitem>-gino,
/ 'deliveryno:', <fs_lineitem>-deliveryno,
/ 'skuno:', <fs_lineitem>-skuno.
ENDLOOP.
ENDLOOP.
Output:
