From a62ea60ef24d30741ef20581a511b3a08844fef0 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 26 Sep 2025 18:46:11 +0200 Subject: [PATCH 1/7] wip --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 449fd8dc..b4f7c4fc 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "license": "MIT", "dependencies": { - "@abaplint/cli": "^2.113.210", + "@abaplint/cli": "^2.113.214", "@abaplint/database-pg": "^2.11.78", "@abaplint/database-sqlite": "^2.11.78", "@abaplint/runtime": "^2.11.93", From 35ba7bd77e83540a22c8ee35e87b5e609746aa64 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 3 Oct 2025 08:41:41 +0200 Subject: [PATCH 2/7] wip --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index b4f7c4fc..d3c565b3 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,11 @@ }, "license": "MIT", "dependencies": { - "@abaplint/cli": "^2.113.214", + "@abaplint/cli": "^2.113.220", "@abaplint/database-pg": "^2.11.78", "@abaplint/database-sqlite": "^2.11.78", - "@abaplint/runtime": "^2.11.93", - "@abaplint/transpiler-cli": "^2.11.93", + "@abaplint/runtime": "^2.11.96", + "@abaplint/transpiler-cli": "^2.11.96", "0x": "^6.0.0" } } From 9d9b5309ce0b7e49a492b80abcb2d7e8cbbcce46 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 3 Oct 2025 08:49:38 +0200 Subject: [PATCH 3/7] add testcase --- src/ixml/cl_ixml.clas.testclasses.abap | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/ixml/cl_ixml.clas.testclasses.abap b/src/ixml/cl_ixml.clas.testclasses.abap index 295600cd..96f70049 100644 --- a/src/ixml/cl_ixml.clas.testclasses.abap +++ b/src/ixml/cl_ixml.clas.testclasses.abap @@ -49,6 +49,7 @@ CLASS ltcl_xml DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. METHODS pretty4 FOR TESTING RAISING cx_static_check. METHODS pretty5 FOR TESTING RAISING cx_static_check. METHODS add_stuff FOR TESTING RAISING cx_static_check. + METHODS create_attribute_ns FOR TESTING RAISING cx_static_check. DATA mi_ixml TYPE REF TO if_ixml. DATA mi_document TYPE REF TO if_ixml_document. @@ -1152,4 +1153,36 @@ CLASS ltcl_xml IMPLEMENTATION. ENDMETHOD. + METHOD create_attribute_ns. + DATA li_element TYPE REF TO if_ixml_element. + DATA li_top TYPE REF TO if_ixml_element. + DATA lv_xml TYPE string. + DATA li_attr TYPE REF TO if_ixml_attribute. + + li_top = mi_document->create_element_ns( + prefix = 'asx' + name = 'abap' ). + mi_document->append_child( li_top ). + + li_element = mi_document->create_element( 'HELLO' ). + + li_attr = mi_document->create_attribute_ns( 'version' ). + li_attr->if_ixml_node~set_value( '1.0' ). + li_element->set_attribute_node_ns( li_attr ). + + li_attr = mi_document->create_attribute_ns( + name = 'asx' + prefix = 'xmlns' ). + li_attr->if_ixml_node~set_value( 'http://abapgit.org' ). + li_element->set_attribute_node_ns( li_attr ). + + li_top->append_child( li_element ). + + lv_xml = render( ). + + cl_abap_unit_assert=>assert_char_cp( + act = lv_xml + exp = '**' ). + ENDMETHOD. + ENDCLASS. \ No newline at end of file From 0024199accca2710c92f8d3045707d5ec87e5fa5 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 3 Oct 2025 08:58:30 +0200 Subject: [PATCH 4/7] fix name --- src/ixml/if_ixml_document.intf.abap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ixml/if_ixml_document.intf.abap b/src/ixml/if_ixml_document.intf.abap index 25fe4817..5632d8f5 100644 --- a/src/ixml/if_ixml_document.intf.abap +++ b/src/ixml/if_ixml_document.intf.abap @@ -24,10 +24,10 @@ INTERFACE if_ixml_document PUBLIC. VALUE(child) TYPE REF TO if_ixml_node, create_attribute_ns IMPORTING - name TYPE string - prefix TYPE string OPTIONAL + name TYPE string + prefix TYPE string OPTIONAL RETURNING - VALUE(element) TYPE REF TO if_ixml_attribute, + VALUE(rval) TYPE REF TO if_ixml_attribute, create_element_ns IMPORTING name TYPE string From de7214fdb2bfe00e41dfedfa01212a34f9f31d5f Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 3 Oct 2025 09:07:48 +0200 Subject: [PATCH 5/7] wip --- src/ixml/cl_ixml.clas.locals_imp.abap | 134 +++++++++++++++++++++++++- src/ixml/if_ixml_attribute.intf.abap | 8 +- 2 files changed, 138 insertions(+), 4 deletions(-) diff --git a/src/ixml/cl_ixml.clas.locals_imp.abap b/src/ixml/cl_ixml.clas.locals_imp.abap index 03923e4a..43db9781 100644 --- a/src/ixml/cl_ixml.clas.locals_imp.abap +++ b/src/ixml/cl_ixml.clas.locals_imp.abap @@ -127,6 +127,136 @@ ENDCLASS. **************************************************************** +CLASS lcl_attribute DEFINITION. + PUBLIC SECTION. + INTERFACES if_ixml_attribute. + PRIVATE SECTION. + DATA mv_name TYPE string. + DATA mv_prefix TYPE string. + DATA mv_value TYPE string. +ENDCLASS. + +CLASS lcl_attribute IMPLEMENTATION. + + METHOD if_ixml_node~append_child. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_attributes. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_first_child. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_children. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~query_interface. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~remove_node. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_parent. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~replace_child. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_name. + val = mv_name. + ENDMETHOD. + + METHOD if_ixml_node~get_depth. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~is_leaf. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_namespace. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_value. + val = mv_value. + ENDMETHOD. + + METHOD if_ixml_node~get_type. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~set_name. + mv_name = name. + ENDMETHOD. + + METHOD if_ixml_node~set_namespace_prefix. + mv_prefix = val. + ENDMETHOD. + + METHOD if_ixml_node~remove_child. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~set_value. + mv_value = value. + ENDMETHOD. + + METHOD if_ixml_node~get_gid. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~insert_child. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_next. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_namespace_prefix. + rv_prefix = mv_prefix. + ENDMETHOD. + + METHOD if_ixml_node~get_namespace_uri. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_height. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~create_filter_name_ns. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~get_column. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~create_iterator_filtered. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~clone. + ASSERT 1 = 2. + ENDMETHOD. + + METHOD if_ixml_node~num_children. + ASSERT 1 = 2. + ENDMETHOD. +ENDCLASS. + +**************************************************************** + CLASS lcl_node_list DEFINITION. PUBLIC SECTION. INTERFACES if_ixml_node_list. @@ -784,7 +914,9 @@ CLASS lcl_document IMPLEMENTATION. ENDMETHOD. METHOD if_ixml_document~create_attribute_ns. - ASSERT 1 = 'todo'. + CREATE OBJECT rval TYPE lcl_attribute. + rval->if_ixml_node~set_name( name ). + rval->if_ixml_node~set_namespace_prefix( prefix ). ENDMETHOD. METHOD if_ixml_document~create_element_ns. diff --git a/src/ixml/if_ixml_attribute.intf.abap b/src/ixml/if_ixml_attribute.intf.abap index dc7aceaa..f9896d74 100644 --- a/src/ixml/if_ixml_attribute.intf.abap +++ b/src/ixml/if_ixml_attribute.intf.abap @@ -1,6 +1,8 @@ INTERFACE if_ixml_attribute PUBLIC. INTERFACES if_ixml_node. - METHODS get_value RETURNING VALUE(val) TYPE string. - METHODS set_value IMPORTING value TYPE string. - METHODS get_name RETURNING VALUE(val) TYPE string. + + ALIASES get_value FOR if_ixml_node~get_value. + ALIASES set_value FOR if_ixml_node~set_value. + ALIASES get_name FOR if_ixml_node~get_name. + ALIASES set_name FOR if_ixml_node~set_name. ENDINTERFACE. \ No newline at end of file From f156fef8ff0287b21f7df509eefb3323e1738447 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 3 Oct 2025 09:11:57 +0200 Subject: [PATCH 6/7] there --- src/ixml/cl_ixml.clas.locals_imp.abap | 2 +- src/ixml/if_ixml_element.intf.abap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ixml/cl_ixml.clas.locals_imp.abap b/src/ixml/cl_ixml.clas.locals_imp.abap index 43db9781..290905e0 100644 --- a/src/ixml/cl_ixml.clas.locals_imp.abap +++ b/src/ixml/cl_ixml.clas.locals_imp.abap @@ -612,7 +612,7 @@ CLASS lcl_node IMPLEMENTATION. ENDMETHOD. METHOD if_ixml_element~set_attribute_node_ns. - ASSERT 1 = 'todo'. + mi_attributes->set_named_item_ns( new_attr ). ENDMETHOD. METHOD if_ixml_element~set_attribute. diff --git a/src/ixml/if_ixml_element.intf.abap b/src/ixml/if_ixml_element.intf.abap index 384d20d0..0fa8e6b9 100644 --- a/src/ixml/if_ixml_element.intf.abap +++ b/src/ixml/if_ixml_element.intf.abap @@ -80,7 +80,7 @@ INTERFACE if_ixml_element PUBLIC. ostream TYPE REF TO if_ixml_ostream, set_attribute_node_ns IMPORTING - attr TYPE any, + new_attr TYPE REF TO if_ixml_attribute, set_attribute IMPORTING name TYPE string From 7c87ce701354b308ad7175ea6d059a09f9f53ff1 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 3 Oct 2025 09:13:56 +0200 Subject: [PATCH 7/7] cleanup --- src/ixml/cl_ixml.clas.locals_imp.abap | 132 +------------------------- 1 file changed, 1 insertion(+), 131 deletions(-) diff --git a/src/ixml/cl_ixml.clas.locals_imp.abap b/src/ixml/cl_ixml.clas.locals_imp.abap index 290905e0..c392abad 100644 --- a/src/ixml/cl_ixml.clas.locals_imp.abap +++ b/src/ixml/cl_ixml.clas.locals_imp.abap @@ -127,136 +127,6 @@ ENDCLASS. **************************************************************** -CLASS lcl_attribute DEFINITION. - PUBLIC SECTION. - INTERFACES if_ixml_attribute. - PRIVATE SECTION. - DATA mv_name TYPE string. - DATA mv_prefix TYPE string. - DATA mv_value TYPE string. -ENDCLASS. - -CLASS lcl_attribute IMPLEMENTATION. - - METHOD if_ixml_node~append_child. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_attributes. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_first_child. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_children. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~query_interface. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~remove_node. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_parent. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~replace_child. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_name. - val = mv_name. - ENDMETHOD. - - METHOD if_ixml_node~get_depth. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~is_leaf. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_namespace. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_value. - val = mv_value. - ENDMETHOD. - - METHOD if_ixml_node~get_type. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~set_name. - mv_name = name. - ENDMETHOD. - - METHOD if_ixml_node~set_namespace_prefix. - mv_prefix = val. - ENDMETHOD. - - METHOD if_ixml_node~remove_child. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~set_value. - mv_value = value. - ENDMETHOD. - - METHOD if_ixml_node~get_gid. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~insert_child. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_next. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_namespace_prefix. - rv_prefix = mv_prefix. - ENDMETHOD. - - METHOD if_ixml_node~get_namespace_uri. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_height. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~create_filter_name_ns. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~get_column. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~create_iterator_filtered. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~clone. - ASSERT 1 = 2. - ENDMETHOD. - - METHOD if_ixml_node~num_children. - ASSERT 1 = 2. - ENDMETHOD. -ENDCLASS. - -**************************************************************** - CLASS lcl_node_list DEFINITION. PUBLIC SECTION. INTERFACES if_ixml_node_list. @@ -914,7 +784,7 @@ CLASS lcl_document IMPLEMENTATION. ENDMETHOD. METHOD if_ixml_document~create_attribute_ns. - CREATE OBJECT rval TYPE lcl_attribute. + CREATE OBJECT rval TYPE lcl_node. rval->if_ixml_node~set_name( name ). rval->if_ixml_node~set_namespace_prefix( prefix ). ENDMETHOD.