Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Transition data to XML file

Former Member
0 Kudos

hi exeprt,

please help me.

Regards,

Hamadelnil

1 ACCEPTED SOLUTION

Former Member
0 Kudos

HI,

Look at the Sample Program

REPORT z_tab_file.

PARAMETERS : gv_file(100) DEFAULT '.ATABTEST.TXT',
p_csv AS CHECKBOX,
p_xml AS CHECKBOX.

*-----Types------------------------------------------------------------*
TYPES:
* Structure for Header File
BEGIN OF gt_nisl_file,
* urgent_flag(1) TYPE c,
mat_typ(2) TYPE c,
sales_org(4) TYPE c,
dist_ch(2) TYPE c,
division(2) TYPE c,
* cont_no(1) TYPE c,
* sold_to(4) TYPE c,
* goods_rep(10) TYPE c,
* delv_dt(1) TYPE c,
* po_no(10) TYPE c,
rep_name(40) TYPE c,
* contact(32) TYPE c,
* street(100) TYPE c,
* postcode(10) TYPE c,
* city(40) TYPE c,
* region(1) TYPE c,
* country(3) TYPE c,
* phone_no(30) TYPE c,
* fst_ln_ind(1) TYPE c,
* order_ln_no(3) TYPE c,
* ni_part_no(35) TYPE c,
* cust_part(18) TYPE c,
* quantity(3) TYPE c,
* die_no(18) TYPE c,
* town_circle(50) TYPE c,
* code(1) TYPE c,
* slogan_no(1) TYPE c,
* head_txt(1000) TYPE c,
* itm_txt1(32) TYPE c,
* itm_txt2(10) TYPE c,
END OF gt_nisl_file.


*-----Internal Tables--------------------------------------------------*
DATA:
git_nisl_file TYPE TABLE OF gt_nisl_file.


*-----Structures/Workareas---------------------------------------------*
DATA:
gs_nisl_file TYPE gt_nisl_file.
* gv_dom TYPE REF TO if_ixml_element,
* gv_document TYPE REF TO if_ixml_document,
* gv_string TYPE xstring,
* gv_size TYPE i,
* git_xml TYPE dcxmllines.

*FIELD-SYMBOLS: <f> TYPE ANY, <delim> TYPE ANY.

* gv_file = '.ATABTEST.TXT'.

*gs_nisl_file-urgent_flag = 'X'.
DO 5000 TIMES.
gs_nisl_file-mat_typ = 'MA'.
gs_nisl_file-sales_org = '2000'.
gs_nisl_file-dist_ch = '80'.
gs_nisl_file-division = '01'.
*gs_nisl_file-cont_no = '12345'.
*gs_nisl_file-sold_to = '2002'.
*gs_nisl_file-goods_rep = 'CUST ADDR'.
*gs_nisl_file-po_no = 'PO12345'.
*gs_nisl_file-delv_dt =
gs_nisl_file-rep_name = 'REP NAME'.
*gs_nisl_file-contact = 'CONTACT'.
*gs_nisl_file-street = 'STREET'.
*gs_nisl_file-postcode = 'POCODE'.
*gs_nisl_file-city = 'CITY'.
*gs_nisl_file-region =
*gs_nisl_file-country = 'GB'.
*gs_nisl_file-phone_no = '12234 57819'.
*gs_nisl_file-fst_ln_ind = 'X'.
*gs_nisl_file-order_ln_no = '010'.
*gs_nisl_file-ni_part_no = '100110'.
*gs_nisl_file-cust_part = '100110'.
*gs_nisl_file-quantity = '1'.
*gs_nisl_file-die_no = '1000032'.
*gs_nisl_file-town_circle = '30000004'.
*gs_nisl_file-code =
*gs_nisl_file-slogan_no = '100110'.
*gs_nisl_file-head_txt = 'HEADER TEXT'.
*gs_nisl_file-itm_txt1 = 'ITEM TEXT1'.
*gs_nisl_file-itm_txt2 = 'ITEM TEXT2'.
APPEND gs_nisl_file TO git_nisl_file.
ENDDO.
DATA:
lv_file(1000) TYPE c,
lv_colt(5000) TYPE c,
lv_cnt(2) TYPE c,
lv_text(8) TYPE c.

CONSTANTS:
lc_hash TYPE x VALUE '09'.
DATA :
lc_hash_x TYPE xstring,
* lc_hash_str type string.
lc_hash_str(2) TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.


FIELD-SYMBOLS:
<lf_text> TYPE ANY.

*ASSIGN lc_hash TO <delim>.

* clear : lc_hash_x, lc_hash_str.
* lc_hash_x = lc_hash.
*
* CALL FUNCTION 'NLS_STRING_CONVERT_TO_SYS'
* EXPORTING
* lang_used = sy-langu
* SOURCE = lc_hash_x
* IMPORTING
* RESULT = lc_hash_str.

* XML
TYPES: BEGIN OF ttab,
record(65535) TYPE c,
END OF ttab.

DATA: xmltable TYPE TABLE OF ttab.

DATA: xml_out TYPE string,
length LIKE sy-tabix,
result1 LIKE gs_nisl_file.

DATA wa_xmltable TYPE ttab.

CHECK NOT git_nisl_file IS INITIAL.

OPEN DATASET gv_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8. "DEFAULT.
IF sy-subrc NE 0.
WRITE 😕 'Unable to open file'(021),
gv_file.
EXIT.
ENDIF. " sy-subrc

IF p_csv = 'X'.
PERFORM csv_download.
ENDIF.

IF p_xml = 'X'.
PERFORM xml_download.
ENDIF.

CLOSE DATASET gv_file.

END-OF-SELECTION.


*&---------------------------------------------------------------------*
*& Form csv_download
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM csv_download.
* Header line 1: Transfer empty line
TRANSFER lv_file TO gv_file.

lv_file = '1'.
lv_colt = text-h01.
lv_cnt = '1'.
DO.
lv_cnt = lv_cnt + 1.
* Generate line with all column numbers
CONCATENATE lv_file lv_cnt INTO lv_file SEPARATED BY lc_hash_str.
IF lv_cnt LE 9.
CONCATENATE 'TEXT-H0' lv_cnt INTO lv_text.
ELSE.
CONCATENATE 'TEXT-H' lv_cnt INTO lv_text.
ENDIF.
ASSIGN (lv_text) TO <lf_text>.
* Generate line with all column headers
CONCATENATE lv_colt <lf_text> INTO lv_colt SEPARATED BY lc_hash_str.
IF lv_cnt = 30.
EXIT.
ENDIF.
ENDDO.
* Header line 2: Line with all column numbers
TRANSFER lv_file TO gv_file.
* Header line 3: Line with all column headers
TRANSFER lv_colt TO gv_file.



LOOP AT git_nisl_file INTO gs_nisl_file.

CLEAR lv_file.
* CONCATENATE gs_nisl_file-urgent_flag
* gs_nisl_file-mat_typ
* gs_nisl_file-sales_org
* gs_nisl_file-dist_ch
* gs_nisl_file-division
* gs_nisl_file-cont_no
* gs_nisl_file-sold_to
* gs_nisl_file-goods_rep
* gs_nisl_file-po_no
* gs_nisl_file-delv_dt
* gs_nisl_file-rep_name
* gs_nisl_file-contact
* gs_nisl_file-street
* gs_nisl_file-postcode
* gs_nisl_file-city
* gs_nisl_file-region
* gs_nisl_file-country
* gs_nisl_file-phone_no
* gs_nisl_file-fst_ln_ind
* gs_nisl_file-order_ln_no
* gs_nisl_file-ni_part_no
* gs_nisl_file-cust_part
* gs_nisl_file-quantity
* gs_nisl_file-die_no
* gs_nisl_file-town_circle
* gs_nisl_file-code
* gs_nisl_file-slogan_no
* gs_nisl_file-head_txt
* gs_nisl_file-itm_txt1
* gs_nisl_file-itm_txt2
* INTO lv_file SEPARATED BY lc_hash_str.

* PO details
TRANSFER lv_file TO gv_file.

ENDLOOP. " LOOP AT git_nisl_file

ENDFORM. "csv_download

*&---------------------------------------------------------------------*
*& Form xml_download
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM xml_download.

CALL TRANSFORMATION ('ID')
SOURCE output = git_nisl_file
RESULT XML xml_out.

CALL FUNCTION 'CONVERT_STRING_TO_TABLE'
EXPORTING
i_string = xml_out
i_tabline_length = '65535'
TABLES
et_table = xmltable.

LOOP AT xmltable INTO wa_xmltable.
TRANSFER wa_xmltable-record TO gv_file.
ENDLOOP.

ENDFORM. "xml_download 

and also look at the Blog ..

/people/r.eijpe/blog/2005/11/10/xml-dom-processing-in-abap-part-i--convert-an-abap-table-into-xml-file-using-sap-dom-approach

Regards

Sudheer

Message was edited by:

Sudheer Junnuthula

4 REPLIES 4

Former Member
0 Kudos

hi Hemadelnil,

Try function module SAP_CONVERT_TO_XML_FORMAT.

Hope this helps

Sajan Joseph

Former Member
0 Kudos

If it is to convert IDOC data, then you can look at

http://www.saptechnical.com/Tutorials/ALE/IDOCToXML/IDOCToXML.htm

Former Member
0 Kudos

HI,

Look at the Sample Program

REPORT z_tab_file.

PARAMETERS : gv_file(100) DEFAULT '.ATABTEST.TXT',
p_csv AS CHECKBOX,
p_xml AS CHECKBOX.

*-----Types------------------------------------------------------------*
TYPES:
* Structure for Header File
BEGIN OF gt_nisl_file,
* urgent_flag(1) TYPE c,
mat_typ(2) TYPE c,
sales_org(4) TYPE c,
dist_ch(2) TYPE c,
division(2) TYPE c,
* cont_no(1) TYPE c,
* sold_to(4) TYPE c,
* goods_rep(10) TYPE c,
* delv_dt(1) TYPE c,
* po_no(10) TYPE c,
rep_name(40) TYPE c,
* contact(32) TYPE c,
* street(100) TYPE c,
* postcode(10) TYPE c,
* city(40) TYPE c,
* region(1) TYPE c,
* country(3) TYPE c,
* phone_no(30) TYPE c,
* fst_ln_ind(1) TYPE c,
* order_ln_no(3) TYPE c,
* ni_part_no(35) TYPE c,
* cust_part(18) TYPE c,
* quantity(3) TYPE c,
* die_no(18) TYPE c,
* town_circle(50) TYPE c,
* code(1) TYPE c,
* slogan_no(1) TYPE c,
* head_txt(1000) TYPE c,
* itm_txt1(32) TYPE c,
* itm_txt2(10) TYPE c,
END OF gt_nisl_file.


*-----Internal Tables--------------------------------------------------*
DATA:
git_nisl_file TYPE TABLE OF gt_nisl_file.


*-----Structures/Workareas---------------------------------------------*
DATA:
gs_nisl_file TYPE gt_nisl_file.
* gv_dom TYPE REF TO if_ixml_element,
* gv_document TYPE REF TO if_ixml_document,
* gv_string TYPE xstring,
* gv_size TYPE i,
* git_xml TYPE dcxmllines.

*FIELD-SYMBOLS: <f> TYPE ANY, <delim> TYPE ANY.

* gv_file = '.ATABTEST.TXT'.

*gs_nisl_file-urgent_flag = 'X'.
DO 5000 TIMES.
gs_nisl_file-mat_typ = 'MA'.
gs_nisl_file-sales_org = '2000'.
gs_nisl_file-dist_ch = '80'.
gs_nisl_file-division = '01'.
*gs_nisl_file-cont_no = '12345'.
*gs_nisl_file-sold_to = '2002'.
*gs_nisl_file-goods_rep = 'CUST ADDR'.
*gs_nisl_file-po_no = 'PO12345'.
*gs_nisl_file-delv_dt =
gs_nisl_file-rep_name = 'REP NAME'.
*gs_nisl_file-contact = 'CONTACT'.
*gs_nisl_file-street = 'STREET'.
*gs_nisl_file-postcode = 'POCODE'.
*gs_nisl_file-city = 'CITY'.
*gs_nisl_file-region =
*gs_nisl_file-country = 'GB'.
*gs_nisl_file-phone_no = '12234 57819'.
*gs_nisl_file-fst_ln_ind = 'X'.
*gs_nisl_file-order_ln_no = '010'.
*gs_nisl_file-ni_part_no = '100110'.
*gs_nisl_file-cust_part = '100110'.
*gs_nisl_file-quantity = '1'.
*gs_nisl_file-die_no = '1000032'.
*gs_nisl_file-town_circle = '30000004'.
*gs_nisl_file-code =
*gs_nisl_file-slogan_no = '100110'.
*gs_nisl_file-head_txt = 'HEADER TEXT'.
*gs_nisl_file-itm_txt1 = 'ITEM TEXT1'.
*gs_nisl_file-itm_txt2 = 'ITEM TEXT2'.
APPEND gs_nisl_file TO git_nisl_file.
ENDDO.
DATA:
lv_file(1000) TYPE c,
lv_colt(5000) TYPE c,
lv_cnt(2) TYPE c,
lv_text(8) TYPE c.

CONSTANTS:
lc_hash TYPE x VALUE '09'.
DATA :
lc_hash_x TYPE xstring,
* lc_hash_str type string.
lc_hash_str(2) TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.


FIELD-SYMBOLS:
<lf_text> TYPE ANY.

*ASSIGN lc_hash TO <delim>.

* clear : lc_hash_x, lc_hash_str.
* lc_hash_x = lc_hash.
*
* CALL FUNCTION 'NLS_STRING_CONVERT_TO_SYS'
* EXPORTING
* lang_used = sy-langu
* SOURCE = lc_hash_x
* IMPORTING
* RESULT = lc_hash_str.

* XML
TYPES: BEGIN OF ttab,
record(65535) TYPE c,
END OF ttab.

DATA: xmltable TYPE TABLE OF ttab.

DATA: xml_out TYPE string,
length LIKE sy-tabix,
result1 LIKE gs_nisl_file.

DATA wa_xmltable TYPE ttab.

CHECK NOT git_nisl_file IS INITIAL.

OPEN DATASET gv_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8. "DEFAULT.
IF sy-subrc NE 0.
WRITE 😕 'Unable to open file'(021),
gv_file.
EXIT.
ENDIF. " sy-subrc

IF p_csv = 'X'.
PERFORM csv_download.
ENDIF.

IF p_xml = 'X'.
PERFORM xml_download.
ENDIF.

CLOSE DATASET gv_file.

END-OF-SELECTION.


*&---------------------------------------------------------------------*
*& Form csv_download
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM csv_download.
* Header line 1: Transfer empty line
TRANSFER lv_file TO gv_file.

lv_file = '1'.
lv_colt = text-h01.
lv_cnt = '1'.
DO.
lv_cnt = lv_cnt + 1.
* Generate line with all column numbers
CONCATENATE lv_file lv_cnt INTO lv_file SEPARATED BY lc_hash_str.
IF lv_cnt LE 9.
CONCATENATE 'TEXT-H0' lv_cnt INTO lv_text.
ELSE.
CONCATENATE 'TEXT-H' lv_cnt INTO lv_text.
ENDIF.
ASSIGN (lv_text) TO <lf_text>.
* Generate line with all column headers
CONCATENATE lv_colt <lf_text> INTO lv_colt SEPARATED BY lc_hash_str.
IF lv_cnt = 30.
EXIT.
ENDIF.
ENDDO.
* Header line 2: Line with all column numbers
TRANSFER lv_file TO gv_file.
* Header line 3: Line with all column headers
TRANSFER lv_colt TO gv_file.



LOOP AT git_nisl_file INTO gs_nisl_file.

CLEAR lv_file.
* CONCATENATE gs_nisl_file-urgent_flag
* gs_nisl_file-mat_typ
* gs_nisl_file-sales_org
* gs_nisl_file-dist_ch
* gs_nisl_file-division
* gs_nisl_file-cont_no
* gs_nisl_file-sold_to
* gs_nisl_file-goods_rep
* gs_nisl_file-po_no
* gs_nisl_file-delv_dt
* gs_nisl_file-rep_name
* gs_nisl_file-contact
* gs_nisl_file-street
* gs_nisl_file-postcode
* gs_nisl_file-city
* gs_nisl_file-region
* gs_nisl_file-country
* gs_nisl_file-phone_no
* gs_nisl_file-fst_ln_ind
* gs_nisl_file-order_ln_no
* gs_nisl_file-ni_part_no
* gs_nisl_file-cust_part
* gs_nisl_file-quantity
* gs_nisl_file-die_no
* gs_nisl_file-town_circle
* gs_nisl_file-code
* gs_nisl_file-slogan_no
* gs_nisl_file-head_txt
* gs_nisl_file-itm_txt1
* gs_nisl_file-itm_txt2
* INTO lv_file SEPARATED BY lc_hash_str.

* PO details
TRANSFER lv_file TO gv_file.

ENDLOOP. " LOOP AT git_nisl_file

ENDFORM. "csv_download

*&---------------------------------------------------------------------*
*& Form xml_download
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM xml_download.

CALL TRANSFORMATION ('ID')
SOURCE output = git_nisl_file
RESULT XML xml_out.

CALL FUNCTION 'CONVERT_STRING_TO_TABLE'
EXPORTING
i_string = xml_out
i_tabline_length = '65535'
TABLES
et_table = xmltable.

LOOP AT xmltable INTO wa_xmltable.
TRANSFER wa_xmltable-record TO gv_file.
ENDLOOP.

ENDFORM. "xml_download 

and also look at the Blog ..

/people/r.eijpe/blog/2005/11/10/xml-dom-processing-in-abap-part-i--convert-an-abap-table-into-xml-file-using-sap-dom-approach

Regards

Sudheer

Message was edited by:

Sudheer Junnuthula

Former Member
0 Kudos

If you have a 4.7 or later system, and have a web background, you can use XSLT transformations.

Have a look at F1 help on CALL TRANSFORMATION, and search this forum.

Michael