Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 9239

Re: Parse XML into Internal table from a string (no file upload)

$
0
0

Hi,

 

 

Try to use cl_ixml .

 

Convert the string to xstring

 

CALL METHOD cl_bcs_convert=>string_to_xstring

 

And here is a sample using cl_ixml .

 

TYPES: BEGIN OF tp_alv_data_1 .
TYPES: date        TYPE char32 ,
        name        TYPE char32 ,
        currency    TYPE char32 ,
        country     TYPE char32 ,
        rate        TYPE char32 ,
        ukurs       TYPE tcurr-ukurs ,
        change      TYPE char32 .
TYPES: END OF tp_alv_data_1 .
*
TYPES: tp_alv_data_1_tab TYPE STANDARD TABLE OF tp_alv_data_1  .

 

 

FORM do_xml_parse_1

  USING

    xml_string TYPE xstring

  CHANGING

    it_alv_data_1 TYPE tp_alv_data_1_tab .

 

  IF xml_string IS INITIAL .

    RETURN .

  ENDIF .

 

  DATA: st_alv_data_1 LIKE LINE OF it_alv_data_1 .

 

  g_ixml = cl_ixml=>create( ).

 

  DATA: streamfactory TYPE REF TO if_ixml_stream_factory.

 

  streamfactory = g_ixml->create_stream_factory( ).

 

  DATA: istream TYPE REF TO if_ixml_istream.

 

  istream  = streamfactory->create_istream_xstring( string = xml_string ).

 

  DATA: document TYPE REF TO if_ixml_document.

 

  document = g_ixml->create_document( ) .

 

  DATA: parser TYPE REF TO if_ixml_parser.

 

  parser = g_ixml->create_parser( stream_factory = streamfactory

                                  istream        = istream

                                  document       = document ).

 

  parser->parse( ).

 

*------------------------------

 

  DATA: date  TYPE string .

  DATA: name  TYPE string .

  DATA: value TYPE string .

 

*------------------------------

 

  DATA: nodes_x TYPE REF TO if_ixml_node_collection .

  DATA: node_x  TYPE REF TO if_ixml_node .

 

  nodes_x = document->get_elements_by_tag_name( name = 'LAST_UPDATE' ).

 

  node_x = nodes_x->get_item( 0 ) .

 

  name  = node_x->get_name( ) .

  date  = node_x->get_value( ) .

 

  st_alv_data_1-date = node_x->get_value( ) .

 

*------------------------------

 

  DATA: length_0 TYPE i .

  DATA: nodes_0 TYPE REF TO if_ixml_node_collection.

  DATA: node_0  TYPE REF TO if_ixml_node .

 

  DATA: length_1 TYPE i .

  DATA: nodes_1 TYPE REF TO if_ixml_node_list .

  DATA: node_1  TYPE REF TO if_ixml_node .

 

  nodes_0 = document->get_elements_by_tag_name( name = 'CURRENCY' ).

  length_0 = nodes_0->get_length( ) .

 

  DATA: index TYPE i .

 

  DO length_0 TIMES .

 

    index = sy-index - 1 .

 

    node_0 = nodes_0->get_item( index ) .

 

    name  = node_0->get_name( ) .

    value = space .

 

    nodes_1 = node_0->get_children( ) .

    length_1 = nodes_1->get_length( ).

 

    DO length_1 TIMES .

 

      index = sy-index - 1 .

 

      node_1 = nodes_1->get_item( index ).

 

      name  = node_1->get_name( ) .

      value = node_1->get_value( ) .

 

      CASE name .

        WHEN 'NAME' .

          st_alv_data_1-name = value .

        WHEN 'CURRENCYCODE' .

          st_alv_data_1-currency = value .

        WHEN 'COUNTRY' .

          st_alv_data_1-country = value .

        WHEN 'RATE' .

          st_alv_data_1-rate  = value .

          st_alv_data_1-ukurs = value .

        WHEN 'CHANGE' .

          st_alv_data_1-change = value .

      ENDCASE .

 

    ENDDO .

 

    APPEND st_alv_data_1 TO it_alv_data_1 .

 

  ENDDO .

 

ENDFORM .                    "do_xml_parse_1

 

 

 

Regards.


Viewing all articles
Browse latest Browse all 9239

Trending Articles