REPORT y_test_xml MESSAGE-ID zmc_qm001.


PARAMETERSp_filnam TYPE localfile OBLIGATORY

DEFAULT 'C:\test_xml4.xml'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_filnam.

  DATAl_v_fieldname TYPE dynfnam.

  l_v_fieldname p_filnam.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  syst-cprog
      dynpro_number syst-dynnr
      field_name    l_v_fieldname
    IMPORTING
      file_name     p_filnam.

START-OF-SELECTION.

  TYPES:
    BEGIN OF ty_tab,
      name  TYPE string,
      value TYPE string,
      depth TYPE i,
    END OF ty_tab.

  DATA:
    lcl_xml_doc  TYPE REF TO cl_xml_document,
    v_subrc      TYPE sysubrc,
    v_node       TYPE REF TO if_ixml_node,
    v_child_node TYPE REF TO if_ixml_node,
    v_root       TYPE REF TO if_ixml_node,
    v_iterator   TYPE REF TO if_ixml_node_iterator,
    v_nodemap    TYPE REF TO if_ixml_named_node_map,
    v_count      TYPE i,
    v_index      TYPE i,
    v_attr       TYPE REF TO if_ixml_node,
    v_name       TYPE string,
    v_prefix     TYPE string,
    v_value      TYPE string,
    v_depth      TYPE i,
    v_char       TYPE char2.

  DATA:
    itab TYPE STANDARD TABLE OF ty_tab,
    wa   TYPE ty_tab.

  CREATE OBJECT lcl_xml_doc.

  CALL METHOD lcl_xml_doc->import_from_file
    EXPORTING
      filename p_filnam
    RECEIVING
      retcode  v_subrc.

  CHECK v_subrc 0.

  v_node lcl_xml_doc->m_document.

  CHECK NOT v_node IS INITIAL.

  v_iterator v_node->create_iterator).
  v_node v_iterator->get_next).

  WHILE NOT v_node IS INITIAL.

    CASE v_node->get_type).

      WHEN if_ixml_node=>co_node_element.
        v_name v_node->get_name).
        v_nodemap v_node->get_attributes).
        v_depth v_node->get_depth).

        IF NOT v_nodemap IS INITIAL.
* attributes
          v_count v_nodemap->get_length).

          DO v_count TIMES.
            v_index   sy-index 1.
            v_attr    v_nodemap->get_itemv_index ).
            v_name    v_attr->get_name).
            v_prefix  v_attr->get_namespace_prefix).
            v_value   v_attr->get_value).

*            v_depth   = v_node->get_depth( ).
          ENDDO.

        ENDIF.

      WHEN  if_ixml_node=>co_node_text OR
            if_ixml_node=>co_node_cdata_section.
* text node
        v_value v_node->get_value).
*        v_depth   = v_node->get_depth( ).

        MOVE v_value TO v_char.

        IF v_char <> cl_abap_char_utilities=>cr_lf.
          wa-name   v_name.
          wa-value  v_value.
          wa-depth  v_depth.

          APPEND wa TO itab.
          CLEAR wa.
        ENDIF.

    ENDCASE.
* advance to next node
    v_node v_iterator->get_next).
  ENDWHILE.

  LOOP AT itab INTO wa.
    WRITE/  'Name :'wa-name,  AT 30 'Valeu:'wa-valueAT 60 'Depth:'wa-depth.
  ENDLOOP.

'SAP Program > ABAP' 카테고리의 다른 글

Internal table에서 중복 데이타 찾기  (0) 2017.11.23
Internal table data to xml  (0) 2017.11.22
GUI Status 생성시 덤프 발생하는 경우  (0) 2017.11.20
BADI 생성/조회 t-code  (0) 2017.11.03
BP Relation Table  (0) 2017.11.02

설정

트랙백

댓글