Advertisement
Guest User

Untitled

a guest
Jun 10th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 3.71 KB | None | 0 0
  1. *&---------------------------------------------------------------------*
  2. *& Report  YEDG_IXML_CONVERT
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*
  8.  
  9. REPORT  yedg_ixml_convert.
  10. TYPE-POOLS: ixml.
  11. CLASS cl_ixml DEFINITION LOAD.
  12.  
  13. TYPES: BEGIN OF xml_line,
  14.         data(256) TYPE x,
  15.       END OF xml_line.
  16.  
  17. DATA: xml_table      TYPE TABLE OF xml_line,
  18.       xml_table_size TYPE i,
  19.       istream        TYPE REF TO if_ixml_istream.
  20.  
  21. DATA: g_ixml TYPE REF TO if_ixml.
  22. g_ixml = cl_ixml=>create( ).
  23.  
  24. DATA: streamfactory TYPE REF TO if_ixml_stream_factory.
  25. streamfactory = g_ixml->create_stream_factory( ).
  26.  
  27. * upload a file from the client's workstation
  28. CALL FUNCTION 'WS_UPLOAD'
  29.   EXPORTING
  30.     filename   = 'd:\rhea.xml'
  31.     filetype   = 'BIN'
  32.   IMPORTING
  33.     filelength = xml_table_size
  34.   TABLES
  35.     data_tab   = xml_table
  36.   EXCEPTIONS
  37.     OTHERS     = 11.
  38.  
  39. * wrap the table containing the file into a stream
  40. istream = streamfactory->create_istream_itable( table = xml_table
  41.                                                 size  = xml_table_size ).
  42.  
  43. DATA: document TYPE REF TO if_ixml_document.
  44. document = g_ixml->create_document( ).
  45.  
  46. DATA: parser TYPE REF TO if_ixml_parser.
  47. parser = g_ixml->create_parser( stream_factory = streamfactory
  48.                                 istream        = istream
  49.                                 document       = document ).
  50. IF parser->parse( ) NE 0.
  51.   IF parser->num_errors( ) NE 0.
  52.     DATA: parseerror TYPE REF TO if_ixml_parse_error,
  53.           str        TYPE string,
  54.           i          TYPE i,
  55.           count      TYPE i,
  56.           index      TYPE i.
  57.     count = parser->num_errors( ).
  58.     WRITE: count, ' parse errors have occured:'.
  59.     index = 0.
  60.     WHILE index < count.
  61.       parseerror = parser->get_error( index = index ).
  62.       i = parseerror->get_line( ).
  63.       WRITE: 'line: ', i.
  64.       i = parseerror->get_column( ).
  65.       WRITE: 'column: ', i.
  66.       str = parseerror->get_reason( ).
  67.       WRITE: str.
  68.       index = index + 1.
  69.     ENDWHILE.
  70.   ENDIF.
  71. ENDIF.
  72.  
  73. DATA: element TYPE REF TO if_ixml_element.
  74. element = document->get_root_element( ).
  75.  
  76. DATA: child TYPE REF TO if_ixml_node.
  77. *child = element->get_first_child( ).
  78.  
  79. DATA: value TYPE string.
  80. DATA: name TYPE string.
  81.  
  82. DATA: iterator TYPE REF TO if_ixml_node_iterator,
  83.       node     TYPE REF TO if_ixml_node.
  84. DATA: attributes TYPE REF TO if_ixml_named_node_map,
  85.       attribute  TYPE REF TO if_ixml_attribute.
  86.  
  87. iterator = document->create_iterator( ).
  88. node = iterator->get_next( ).
  89.  
  90. WHILE NOT node IS INITIAL.
  91.  
  92.   attributes = node->get_attributes( ).
  93.   IF attributes IS NOT INITIAL.
  94.     index = 0.
  95.     WHILE index < attributes->get_length( ).
  96.       child = attributes->get_item( index ).
  97.       name = child->get_name( ).
  98.       value = child->get_value( ).
  99.       IF name EQ 'contentType' AND
  100.          value EQ 'text/html'.
  101.         value = node->get_value( ).
  102.         node->set_value( value ).
  103.       ENDIF.
  104.       index = index + 1.
  105.     ENDWHILE.
  106.   ENDIF.
  107.  
  108.   node = iterator->get_next( ).
  109. ENDWHILE.
  110.  
  111.  
  112. DATA ostream TYPE REF TO if_ixml_ostream.
  113. ostream = streamfactory->create_ostream_itable( xml_table ).
  114.  
  115. * create renderer
  116. DATA renderer TYPE REF TO if_ixml_renderer.
  117. renderer = g_ixml->create_renderer( ostream = ostream
  118.                                           document = document ).
  119.  
  120. renderer->render( ).
  121.  
  122. CALL FUNCTION 'WS_DOWNLOAD'
  123.   EXPORTING
  124.     filename                      = 'd:\rhea2.xml'
  125.     filetype                      = 'BIN'
  126.   TABLES
  127.     data_tab                      = xml_table.
  128.  
  129. IF sy-subrc EQ 0.
  130.   WRITE: / 'Success!'.
  131. ENDIF.
  132.  
  133.  
  134. CHECK sy-subrc EQ 0.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement