[ABAP] XML in interne Tabelle wandeln

PARAMETERS: p_fname TYPE localfile OBLIGATORY.

* wenn die F4-Hilfe für den Dateinamen aufgerufen wird
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.

  DATA: lv_rc TYPE i.
  DATA: it_files TYPE filetable.
  DATA: lv_action TYPE i.

* File-Tabelle leeren, da hier noch alte Einträge von vorherigen Aufrufen drin stehen können
  CLEAR it_files.

* FileOpen-Dialog aufrufen
  TRY.
      cl_gui_frontend_services=>file_open_dialog( EXPORTING file_filter    = |xml (*.xml)\|*.xml\|{ cl_gui_frontend_services=>filetype_all }|
                                                            multiselection = abap_false
                                                  CHANGING  file_table     = it_files
                                                            rc             = lv_rc
                                                            user_action    = lv_action ).

      IF lv_action = cl_gui_frontend_services=>action_ok.
* wenn Datei ausgewählt wurde
        IF lines( it_files ) > 0.
* ersten Tabelleneintrag lesen
          p_fname = it_files[ 1 ]-filename.
        ENDIF.
      ENDIF.

    CATCH cx_root INTO DATA(e_text).
      MESSAGE e_text->get_text( ) TYPE 'I'.
  ENDTRY.

START-OF-SELECTION.

* XML-Document
  DATA(o_xml) = NEW cl_xml_document( ).

* Open file
  IF o_xml->import_from_file( filename = p_fname ) = 0.
    DATA: lv_xml_xstring TYPE xstring.
    DATA: lv_subrc       TYPE sy-subrc.
    DATA: lv_size        TYPE i.

* XSTRING
    o_xml->render_2_xstring( IMPORTING retcode = lv_subrc
                                       stream  = lv_xml_xstring
                                       size    = lv_size ).

    IF lv_subrc = 0.
      DATA: it_xml_tab TYPE STANDARD TABLE OF smum_xmltb WITH DEFAULT KEY.
      DATA(it_return) = VALUE bapiret2_t( ).

* interne Tabelle erstellen
      CALL FUNCTION 'SMUM_XML_PARSE'
        EXPORTING
          xml_input = lv_xml_xstring
        TABLES
          xml_table = it_xml_tab
          return    = it_return.

* Hier Objekte für die Ausgabe hinzufügen
      cl_demo_output=>write_data( it_return ).
      cl_demo_output=>write_data( it_xml_tab ).

*       HTML-Code vom Demo-Output holen
      DATA(lv_html) = cl_demo_output=>get( ).

*       Daten im Inline-Browser im SAP-Fenster anzeigen
      cl_abap_browser=>show_html( EXPORTING
                                    title        = 'Daten'
                                    html_string  = lv_html
                                    container    = cl_gui_container=>default_screen ).

*       cl_gui_container=>default_screen erzwingen
      WRITE: space.
    ENDIF.
  ENDIF.