Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *&---------------------------------------------------------------------*
- *& Report YEDG_IXML_CONVERT
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- REPORT yedg_ixml_convert.
- TYPE-POOLS: ixml.
- CLASS cl_ixml DEFINITION LOAD.
- TYPES: BEGIN OF xml_line,
- data(256) TYPE x,
- END OF xml_line.
- DATA: xml_table TYPE TABLE OF xml_line,
- xml_table_size TYPE i,
- istream TYPE REF TO if_ixml_istream.
- DATA: g_ixml TYPE REF TO if_ixml.
- g_ixml = cl_ixml=>create( ).
- DATA: streamfactory TYPE REF TO if_ixml_stream_factory.
- streamfactory = g_ixml->create_stream_factory( ).
- * upload a file from the client's workstation
- CALL FUNCTION 'WS_UPLOAD'
- EXPORTING
- filename = 'd:\rhea.xml'
- filetype = 'BIN'
- IMPORTING
- filelength = xml_table_size
- TABLES
- data_tab = xml_table
- EXCEPTIONS
- OTHERS = 11.
- * wrap the table containing the file into a stream
- istream = streamfactory->create_istream_itable( table = xml_table
- size = xml_table_size ).
- 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 ).
- IF parser->parse( ) NE 0.
- IF parser->num_errors( ) NE 0.
- DATA: parseerror TYPE REF TO if_ixml_parse_error,
- str TYPE string,
- i TYPE i,
- count TYPE i,
- index TYPE i.
- count = parser->num_errors( ).
- WRITE: count, ' parse errors have occured:'.
- index = 0.
- WHILE index < count.
- parseerror = parser->get_error( index = index ).
- i = parseerror->get_line( ).
- WRITE: 'line: ', i.
- i = parseerror->get_column( ).
- WRITE: 'column: ', i.
- str = parseerror->get_reason( ).
- WRITE: str.
- index = index + 1.
- ENDWHILE.
- ENDIF.
- ENDIF.
- DATA: element TYPE REF TO if_ixml_element.
- element = document->get_root_element( ).
- DATA: child TYPE REF TO if_ixml_node.
- *child = element->get_first_child( ).
- DATA: value TYPE string.
- DATA: name TYPE string.
- DATA: iterator TYPE REF TO if_ixml_node_iterator,
- node TYPE REF TO if_ixml_node.
- DATA: attributes TYPE REF TO if_ixml_named_node_map,
- attribute TYPE REF TO if_ixml_attribute.
- iterator = document->create_iterator( ).
- node = iterator->get_next( ).
- WHILE NOT node IS INITIAL.
- attributes = node->get_attributes( ).
- IF attributes IS NOT INITIAL.
- index = 0.
- WHILE index < attributes->get_length( ).
- child = attributes->get_item( index ).
- name = child->get_name( ).
- value = child->get_value( ).
- IF name EQ 'contentType' AND
- value EQ 'text/html'.
- value = node->get_value( ).
- node->set_value( value ).
- ENDIF.
- index = index + 1.
- ENDWHILE.
- ENDIF.
- node = iterator->get_next( ).
- ENDWHILE.
- DATA ostream TYPE REF TO if_ixml_ostream.
- ostream = streamfactory->create_ostream_itable( xml_table ).
- * create renderer
- DATA renderer TYPE REF TO if_ixml_renderer.
- renderer = g_ixml->create_renderer( ostream = ostream
- document = document ).
- renderer->render( ).
- CALL FUNCTION 'WS_DOWNLOAD'
- EXPORTING
- filename = 'd:\rhea2.xml'
- filetype = 'BIN'
- TABLES
- data_tab = xml_table.
- IF sy-subrc EQ 0.
- WRITE: / 'Success!'.
- ENDIF.
- CHECK sy-subrc EQ 0.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement