refactor XML pretty method (#6522)

This commit is contained in:
Lars Hvam 2023-10-05 05:53:05 +02:00 committed by GitHub
parent caaa543b37
commit f542b3433a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 39 additions and 2 deletions

View File

@ -36,6 +36,13 @@ CLASS zcl_abapgit_convert DEFINITION
VALUE(rv_xstring) TYPE xstring
RAISING
zcx_abapgit_exception .
CLASS-METHODS xstring_to_string_utf8_bom
IMPORTING
!iv_xstring TYPE xstring
RETURNING
VALUE(rv_string) TYPE string
RAISING
zcx_abapgit_exception .
CLASS-METHODS xstring_to_int
IMPORTING
!iv_xstring TYPE xstring
@ -382,6 +389,25 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
ENDMETHOD.
METHOD xstring_to_string_utf8_bom.
DATA lv_xstring TYPE xstring.
IF iv_xstring IS INITIAL.
RETURN.
ENDIF.
lv_xstring = iv_xstring.
" Add UTF-8 BOM
IF xstrlen( lv_xstring ) < 3 OR lv_xstring(3) <> cl_abap_char_utilities=>byte_order_mark_utf8.
lv_xstring = cl_abap_char_utilities=>byte_order_mark_utf8 && lv_xstring.
ENDIF.
rv_string = xstring_to_string_utf8( lv_xstring ).
ENDMETHOD.
METHOD x_to_bitbyte.
CLEAR rv_bitbyte.

View File

@ -29,6 +29,8 @@ CLASS ZCL_ABAPGIT_XML_PRETTY IMPLEMENTATION.
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,
lv_xstring TYPE xstring,
li_encoding TYPE REF TO if_ixml_encoding,
li_ostream TYPE REF TO if_ixml_ostream,
li_renderer TYPE REF TO if_ixml_renderer.
@ -39,7 +41,8 @@ CLASS ZCL_ABAPGIT_XML_PRETTY IMPLEMENTATION.
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_istream = li_stream_factory->create_istream_xstring(
zcl_abapgit_convert=>string_to_xstring_utf8( iv_xml ) ).
li_parser = li_ixml->create_parser( stream_factory = li_stream_factory
istream = li_istream
document = li_xml_doc ).
@ -55,8 +58,13 @@ CLASS ZCL_ABAPGIT_XML_PRETTY IMPLEMENTATION.
li_istream->close( ).
li_ostream = li_stream_factory->create_ostream_cstring( rv_xml ).
li_ostream = li_stream_factory->create_ostream_xstring( lv_xstring ).
li_encoding = li_ixml->create_encoding(
character_set = 'utf-8'
byte_order = if_ixml_encoding=>co_big_endian ).
li_xml_doc->set_encoding( li_encoding ).
li_renderer = li_ixml->create_renderer( ostream = li_ostream
document = li_xml_doc ).
@ -64,5 +72,8 @@ CLASS ZCL_ABAPGIT_XML_PRETTY IMPLEMENTATION.
li_renderer->render( ).
rv_xml = zcl_abapgit_convert=>xstring_to_string_utf8_bom( lv_xstring ).
REPLACE FIRST OCCURRENCE OF 'utf-8' IN rv_xml WITH 'utf-16'.
ENDMETHOD.
ENDCLASS.