abapGit/src/xml/zcl_abapgit_xml_pretty.clas.abap
Lars Hvam f782190b3a
class ZCL_ABAPGIT_XML_PRETTY add unit tests (#4263)
* class ZCL_ABAPGIT_XML_PRETTY add unit tests

closes #4260

* Update zcl_abapgit_xml_pretty.clas.testclasses.abap

* fix for byte order mark
2020-12-01 05:09:02 +01:00

69 lines
2.0 KiB
ABAP

CLASS zcl_abapgit_xml_pretty DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS print
IMPORTING
!iv_xml TYPE string
!iv_ignore_errors TYPE abap_bool DEFAULT abap_true
!iv_unpretty TYPE abap_bool DEFAULT abap_false
RETURNING
VALUE(rv_xml) TYPE string
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_ABAPGIT_XML_PRETTY IMPLEMENTATION.
METHOD print.
DATA: li_ixml TYPE REF TO if_ixml,
li_xml_doc TYPE REF TO if_ixml_document,
li_stream_factory TYPE REF TO if_ixml_stream_factory,
li_istream TYPE REF TO if_ixml_istream,
li_parser TYPE REF TO if_ixml_parser,
li_ostream TYPE REF TO if_ixml_ostream,
li_renderer TYPE REF TO if_ixml_renderer.
ASSERT NOT iv_xml IS INITIAL.
li_ixml = cl_ixml=>create( ).
li_xml_doc = li_ixml->create_document( ).
li_stream_factory = li_ixml->create_stream_factory( ).
li_istream = li_stream_factory->create_istream_string( iv_xml ).
li_parser = li_ixml->create_parser( stream_factory = li_stream_factory
istream = li_istream
document = li_xml_doc ).
li_parser->set_normalizing( abap_true ).
IF li_parser->parse( ) <> 0.
IF iv_ignore_errors = abap_true.
rv_xml = iv_xml.
RETURN.
ELSE.
zcx_abapgit_exception=>raise( 'error parsing xml' ).
ENDIF.
ENDIF.
li_istream->close( ).
li_ostream = li_stream_factory->create_ostream_cstring( rv_xml ).
li_renderer = li_ixml->create_renderer( ostream = li_ostream
document = li_xml_doc ).
li_renderer->set_normalizing( boolc( iv_unpretty = abap_false ) ).
li_renderer->render( ).
ENDMETHOD.
ENDCLASS.