Merge pull request #779 from larshp/issue_775

empty xml, fix #775
This commit is contained in:
Lars Hvam 2017-06-10 13:30:02 +02:00 committed by GitHub
commit 103ed56abb
2 changed files with 64 additions and 3 deletions

View File

@ -666,6 +666,8 @@ CLASS ltcl_xml DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
METHODS:
up FOR TESTING
RAISING lcx_exception,
empty FOR TESTING
RAISING lcx_exception,
down FOR TESTING
RAISING lcx_exception.
@ -684,6 +686,38 @@ ENDCLASS.
CLASS ltcl_xml IMPLEMENTATION.
METHOD empty.
DATA: ls_old TYPE st_old,
ls_new TYPE st_new,
lv_xml TYPE string,
lo_input TYPE REF TO lcl_xml_input,
lo_output TYPE REF TO lcl_xml_output.
CLEAR ls_old.
CREATE OBJECT lo_output.
lo_output->add( iv_name = 'DATA'
ig_data = ls_old ).
lv_xml = lo_output->render( ).
CREATE OBJECT lo_input
EXPORTING
iv_xml = lv_xml.
lo_input->read( EXPORTING iv_name = 'DATA'
CHANGING cg_data = ls_new ).
cl_abap_unit_assert=>assert_equals(
act = ls_new-foo
exp = ls_old-foo ).
cl_abap_unit_assert=>assert_equals(
act = ls_new-bar
exp = ls_old-bar ).
ENDMETHOD.
METHOD up.
DATA: ls_old TYPE st_old,

View File

@ -183,6 +183,8 @@ CLASS lcl_xml_output DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC.
add_xml
IMPORTING iv_name TYPE clike
ii_xml TYPE REF TO if_ixml_element,
build_asx_node
RETURNING VALUE(ri_element) TYPE REF TO if_ixml_element,
render
IMPORTING iv_normalize TYPE sap_bool DEFAULT abap_true
is_metadata TYPE lif_defs=>ty_metadata OPTIONAL
@ -260,17 +262,20 @@ CLASS lcl_xml_output IMPLEMENTATION.
IF mi_raw IS INITIAL.
li_abap ?= mi_xml_doc->get_root( )->get_first_child( ).
mi_xml_doc->get_root( )->remove_child( li_abap ).
IF li_abap IS INITIAL.
li_abap = build_asx_node( ).
ENDIF.
ELSE.
li_abap = mi_raw.
ENDIF.
li_git = mi_xml_doc->create_element( c_abapgit_tag ).
li_git->set_attribute( name = c_attr_version value = gc_xml_version ). "#EC NOTEXT
li_git->set_attribute( name = c_attr_version value = gc_xml_version ).
IF NOT is_metadata IS INITIAL.
li_git->set_attribute( name = c_attr_serializer
value = is_metadata-class ). "#EC NOTEXT
value = is_metadata-class ).
li_git->set_attribute( name = c_attr_serializer_version
value = is_metadata-version ). "#EC NOTEXT
value = is_metadata-version ).
ENDIF.
li_git->append_child( li_abap ).
mi_xml_doc->get_root( )->append_child( li_git ).
@ -279,6 +284,28 @@ CLASS lcl_xml_output IMPLEMENTATION.
ENDMETHOD. "render
METHOD build_asx_node.
DATA: li_attr TYPE REF TO if_ixml_attribute.
ri_element = mi_xml_doc->create_element_ns(
name = 'abap'
prefix = 'asx' ).
li_attr = mi_xml_doc->create_attribute_ns(
name = 'version' ).
li_attr->if_ixml_node~set_value( '1.0' ).
ri_element->set_attribute_node_ns( li_attr ).
li_attr = mi_xml_doc->create_attribute_ns(
name = 'asx'
prefix = 'xmlns' ).
li_attr->if_ixml_node~set_value( 'http://www.sap.com/abapxml' ).
ri_element->set_attribute_node_ns( li_attr ).
ENDMETHOD.
ENDCLASS. "lcl_xml_output IMPLEMENTATION
*----------------------------------------------------------------------*