07-26-2019 10:52 AM
I try to transform the XML of Adobe Print File into an ABAP-Structure.
The target is to transfer the pdf-xml into labelpoint2 (printer language for thermo printer - Datamax, Microplex-Printer). My transformation class from ABAP-structure to Labelpoint2 works fine.
My problem is, that I have to deal with <field> and <draw> elements in mixed order.
Sometimes only one type of the tags is included in the XML-file. For example only <field>-Tags.
If the <field> and <draw> elements are sorted I don't have any problems to transfer them into my ABAP-Structure. But if they are not sorted my transformation didn't work. The unsorted order is unfortunately the norm.
Result for this shown XML-Example: The unsorted elements after 3 times draw and 2 times field are ignored.
How I have to change the simple transformation to make it run?
I don't have any idea.
Could someone help me to fix this problem, please?
Many thanks in advance.
In a simplistic form, the xml-file looks like the content of the variable lf_xml_file.
Here is the complete transformation report:
*&---------------------------------------------------------------------*
*& Report z_xml_test_st01
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_xml_test_st01.
TYPES: BEGIN OF ts_draw,
text TYPE char10,
END OF ts_draw.
TYPES: tt_draw TYPE STANDARD TABLE OF ts_draw WITH KEY text.
TYPES: BEGIN OF ts_field,
text TYPE char10,
END OF ts_field.
TYPES: tt_field TYPE STANDARD TABLE OF ts_field WITH KEY text.
TYPES: BEGIN OF ts_xml_data,
t_draw TYPE tt_draw,
t_field TYPE tt_field,
END OF ts_xml_data.
DATA: lf_xml_file TYPE string.
DATA: ls_xml_data TYPE ts_xml_data,
lt_xml_content TYPE filetable,
lf_anz_dat TYPE i,
lo_xml_document TYPE REF TO cl_xml_document,
lf_filename TYPE localfile,
lf_subrc TYPE sy-subrc,
lf_xml_string TYPE xstring,
lf_size TYPE sy-tabix.
*cl_gui_frontend_services=>file_open_dialog(
* EXPORTING* window_title = 'Select an XML file '
* default_filename = 'c:\users\XXXXXXXXX\Desktop\zwn_test_st01.xml'
* initial_directory = 'C:\'
* CHANGING
* file_table = lt_xml_content
* rc = lf_anz_dat* EXCEPTIONS* OTHERS = 5 ).
** lf_filename = lt_xml_content[ 1 ].<br>
** lo_xml_document = NEW #( ).*<br>
* lo_xml_document->import_from_file(
* EXPORTING
* filename = lf_filename
* RECEIVING
* retcode = lf_subrc ).
*
* lo_xml_document->render_2_xstring(
* IMPORTING
* retcode = lf_subrc
* stream = lf_xml_string
* size = lf_size ).
* XML file to transfer
lf_xml_file = |<template>| &
| <draw>| &
| <value>| &
| <text>1</text>| &
| </value>| &
| </draw>| &
| <draw>| &
| <value>| &
| <text>2</text>| &
| </value>| &
| </draw>| &
| <draw>| &
| <value>| &
| <text>3</text>| &
| </value>| &
| </draw>| &
| <field>| &
| <value>| &
| <text>1</text>| &
| </value>| &
| </field>| &
| <field>| &
| <value>| &
| <text>2</text>| &
| </value>| &
| </field>| &
*| <draw>| &
*| <value>| &
*| <text>4</text>| &
*| </value>| &
*| </draw>| &
*| <field>| &
*| <value>| &
*| <text>3</text>| &
*| </value>| &
*| </field>| &
*| <draw>| &
*| <value>| &
*| <text>5</text>| &
*| </value>| &
*| </draw>| &
|</template>|.
TRY.
CALL TRANSFORMATION zwn_test_st01
* SOURCE XML lf_xml_string
SOURCE XML lf_xml_file
RESULT root = ls_xml_data.
CATCH cx_st_error INTO DATA(l_error).
ENDTRY.
BREAK-POINT.
The simple transformation file looks like:
The real transformation, of course, looks a lot more complicated, with plenty of optional tags and optional attributes.
But to show my problem this simple version is good enough:
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates"
xmlns:ddic="http://www.sap.com/abapxml/types/dictionary"
xmlns:def="http://www.sap.com/abapxml/types/defined">
<tt:root name="ROOT" type="?"/>
<tt:template>
<template>
<tt:group>
<tt:cond frq="?">
<tt:loop name="d" ref="ROOT.t_draw">
<draw>
<value>
<text>
<tt:value ref="$d.text"/>
</text>
</value>
</draw>
</tt:loop>
<tt:loop name="f" ref="ROOT.t_field">
<field>
<value>
<text>
<tt:value ref="$f.text"/>
</text>
</value>
</field>
</tt:loop>
</tt:cond>
</tt:group>
</template>
</tt:template>
</tt:transform>
06-25-2020 6:37 AM
Hi wolfgang.nitz,
I am also facing similar issue when trying to upload multiple XML files using ST in abap.
how to check optional tags?
could you please help me if you have any solution on above?
i tried as below: transformation logic
06-25-2020 6:44 AM