mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
Removed workaroung for escaping - find a better solution
This commit is contained in:
parent
1f26f449f1
commit
d007986b30
|
@ -1122,30 +1122,11 @@ CLASS lcl_xml DEFINITION FINAL CREATE PUBLIC.
|
||||||
IMPORTING ii_root TYPE REF TO if_ixml_element OPTIONAL
|
IMPORTING ii_root TYPE REF TO if_ixml_element OPTIONAL
|
||||||
iv_name TYPE string
|
iv_name TYPE string
|
||||||
RETURNING VALUE(ri_element) TYPE REF TO if_ixml_element.
|
RETURNING VALUE(ri_element) TYPE REF TO if_ixml_element.
|
||||||
PROTECTED SECTION.
|
|
||||||
TYPES: BEGIN OF ty_s_ecape_map,
|
|
||||||
forbidden_char TYPE c LENGTH 1,
|
|
||||||
escape_sequence TYPE string, "in order to allow longer (thus unique) escape sequences
|
|
||||||
END OF ty_s_ecape_map,
|
|
||||||
ty_t_escape_map TYPE SORTED TABLE OF ty_s_ecape_map WITH UNIQUE KEY forbidden_char
|
|
||||||
WITH UNIQUE SORTED KEY escape_sequence COMPONENTS escape_sequence. "to prevent ambiguity
|
|
||||||
|
|
||||||
DATA mt_escape_map TYPE ty_t_escape_map.
|
|
||||||
|
|
||||||
METHODS name_escape
|
|
||||||
IMPORTING
|
|
||||||
iv_revert TYPE abap_bool DEFAULT abap_false
|
|
||||||
CHANGING
|
|
||||||
cv_text TYPE string
|
|
||||||
RAISING lcx_exception.
|
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
DATA: mi_ixml TYPE REF TO if_ixml,
|
DATA: mi_ixml TYPE REF TO if_ixml,
|
||||||
mi_root TYPE REF TO if_ixml_element.
|
mi_root TYPE REF TO if_ixml_element.
|
||||||
|
|
||||||
* CONSTANTS co_suffix_table_line_struc TYPE string VALUE '_item'.
|
|
||||||
|
|
||||||
METHODS special_names
|
METHODS special_names
|
||||||
CHANGING cv_name TYPE string.
|
CHANGING cv_name TYPE string.
|
||||||
|
|
||||||
|
@ -1221,8 +1202,6 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
lv_name = iv_name.
|
lv_name = iv_name.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
name_escape( CHANGING cv_text = lv_name ).
|
|
||||||
|
|
||||||
li_struct = xml_find( ii_root = ii_root
|
li_struct = xml_find( ii_root = ii_root
|
||||||
iv_name = lv_name ).
|
iv_name = lv_name ).
|
||||||
IF NOT li_struct IS BOUND.
|
IF NOT li_struct IS BOUND.
|
||||||
|
@ -1287,8 +1266,6 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
name_escape( CHANGING cv_text = lv_name ).
|
|
||||||
|
|
||||||
li_root = xml_find( ii_root = ii_root
|
li_root = xml_find( ii_root = ii_root
|
||||||
iv_name = lv_name ).
|
iv_name = lv_name ).
|
||||||
IF NOT li_root IS BOUND.
|
IF NOT li_root IS BOUND.
|
||||||
|
@ -1321,7 +1298,7 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
|
|
||||||
IF lv_success = abap_false.
|
IF lv_success = abap_false.
|
||||||
* Fallback to the previous implementation: the table's name was not always propagated
|
* Fallback to the previous implementation: the table's name was not always propagated
|
||||||
* the reading of the line.
|
* the reading of the line. Thus, read again without the name (of the table) being passed
|
||||||
CASE lv_kind.
|
CASE lv_kind.
|
||||||
WHEN cl_abap_typedescr=>kind_struct.
|
WHEN cl_abap_typedescr=>kind_struct.
|
||||||
structure_read( EXPORTING ii_root = li_root
|
structure_read( EXPORTING ii_root = li_root
|
||||||
|
@ -1408,13 +1385,6 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
mi_root->set_attribute( name = 'version' value = gc_xml_version ). "#EC NOTEXT
|
mi_root->set_attribute( name = 'version' value = gc_xml_version ). "#EC NOTEXT
|
||||||
mi_xml_doc->append_child( mi_root ).
|
mi_xml_doc->append_child( mi_root ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
* define characters to be escaped
|
|
||||||
DATA ls_escape_map LIKE LINE OF mt_escape_map.
|
|
||||||
ls_escape_map-forbidden_char = |/|.
|
|
||||||
ls_escape_map-escape_sequence = |zyx_1|. "custom escape sequence as the fraction slash (⁄) is a unicode-character and ABAPGit should also run on non-unicode)
|
|
||||||
INSERT ls_escape_map INTO TABLE mt_escape_map.
|
|
||||||
|
|
||||||
ENDMETHOD. "xml_root
|
ENDMETHOD. "xml_root
|
||||||
|
|
||||||
METHOD table_add.
|
METHOD table_add.
|
||||||
|
@ -1440,8 +1410,6 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
name_escape( CHANGING cv_text = lv_name ).
|
|
||||||
|
|
||||||
li_table = mi_xml_doc->create_element( lv_name ).
|
li_table = mi_xml_doc->create_element( lv_name ).
|
||||||
lo_data_descr = lo_table_descr->get_table_line_type( ).
|
lo_data_descr = lo_table_descr->get_table_line_type( ).
|
||||||
lv_kind = lo_data_descr->kind.
|
lv_kind = lo_data_descr->kind.
|
||||||
|
@ -1500,8 +1468,6 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
name_escape( CHANGING cv_text = lv_name ).
|
|
||||||
|
|
||||||
li_element = mi_xml_doc->create_element( lv_name ).
|
li_element = mi_xml_doc->create_element( lv_name ).
|
||||||
|
|
||||||
lv_string = ig_element.
|
lv_string = ig_element.
|
||||||
|
@ -1534,8 +1500,6 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
lv_name = iv_name.
|
lv_name = iv_name.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
name_escape( CHANGING cv_text = lv_name ).
|
|
||||||
|
|
||||||
li_element = xml_find( ii_root = ii_root
|
li_element = xml_find( ii_root = ii_root
|
||||||
iv_name = lv_name ).
|
iv_name = lv_name ).
|
||||||
IF NOT li_element IS BOUND.
|
IF NOT li_element IS BOUND.
|
||||||
|
@ -1568,8 +1532,6 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
name_escape( CHANGING cv_text = lv_name ).
|
|
||||||
|
|
||||||
li_structure = mi_xml_doc->create_element( lv_name ).
|
li_structure = mi_xml_doc->create_element( lv_name ).
|
||||||
|
|
||||||
LOOP AT lo_descr->components ASSIGNING <ls_comp>.
|
LOOP AT lo_descr->components ASSIGNING <ls_comp>.
|
||||||
|
@ -1628,26 +1590,7 @@ CLASS lcl_xml IMPLEMENTATION.
|
||||||
ENDMETHOD. "xml_render
|
ENDMETHOD. "xml_render
|
||||||
|
|
||||||
|
|
||||||
METHOD name_escape.
|
|
||||||
* Besides the XML-reserved character ( <, >, &, % ) there are other characters which should be replaced
|
|
||||||
* in order to create a valid xml. One of them e. g. is the forward-slash at the beginning contained
|
|
||||||
* in namespaces. Included e. g. in a table's name, this will screw-up the xml.
|
|
||||||
DATA ls_escape_map LIKE LINE OF mt_escape_map.
|
|
||||||
|
|
||||||
LOOP AT mt_escape_map INTO ls_escape_map.
|
|
||||||
IF iv_revert = abap_false.
|
|
||||||
* check whether the original text contains an escape sequence. If this was the case, the reading of the data would be corrupted
|
|
||||||
IF cv_text CS ls_escape_map-forbidden_char
|
|
||||||
AND cv_text CS ls_escape_map-escape_sequence.
|
|
||||||
RAISE EXCEPTION TYPE lcx_exception EXPORTING iv_text = |Text to be escaped contains escape-sequence { ls_escape_map-escape_sequence }|.
|
|
||||||
ENDIF.
|
|
||||||
REPLACE ALL OCCURRENCES OF ls_escape_map-forbidden_char IN cv_text WITH ls_escape_map-escape_sequence.
|
|
||||||
ELSE.
|
|
||||||
REPLACE ALL OCCURRENCES OF ls_escape_map-escape_sequence IN cv_text WITH ls_escape_map-forbidden_char.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
ENDCLASS. "lcl_xml IMPLEMENTATION
|
ENDCLASS. "lcl_xml IMPLEMENTATION
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user