Application Development and Automation 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: 
Read only

ABAP to XML

kiran_k8
Active Contributor
0 Likes
2,236

Hi,

I am trying to generate an XML from ABAP using the below



data: function1 type string.
data: begin of itab occurs 0,
      addrnumber like adcp-addrnumber,
      function like adcp-function,
      end of itab.
data:xml_string type xstring,
      result like itab.
select-options: function for (function1)  no intervals visible length 40.
select addrnumber
       function
       into table itab
       from adcp
       where function IN function.
*if itab[] is not initial.
*loop at itab.
*write:/ itab-addrnumber,
*        itab-function.
*endloop.
*endif.

if itab[] is not initial.
CALL TRANSFORMATION zscratchpad
     SOURCE para = itab
     RESULT XML xml_string.
* Display result
* cl_abap_browser=>show_xml( EXPORTING xml_string = xml_string ).
CALL FUNCTION 'SCOL_TRACE_SHOW_XML'
  EXPORTING
    xdoc = xml_string.
endif.

Getting an error "XML Page can't be displayed".Do anyone here have an idea where I am going wrong.

Thanks,

Kiran.

Hi,

I am trying to generate an XML from ABAP using the below



data: function1 type string.
data: begin of itab occurs 0,
      addrnumber like adcp-addrnumber,
      function like adcp-function,
      end of itab.
data:xml_string type xstring,
      result like itab.
select-options: function for (function1)  no intervals visible length 40.
select addrnumber
       function
       into table itab
       from adcp
       where function IN function.
*if itab[] is not initial.
*loop at itab.
*write:/ itab-addrnumber,
*        itab-function.
*endloop.
*endif.

if itab[] is not initial.
CALL TRANSFORMATION zscratchpad
     SOURCE para = itab
     RESULT XML xml_string.
* Display result
* cl_abap_browser=>show_xml( EXPORTING xml_string = xml_string ).
CALL FUNCTION 'SCOL_TRACE_SHOW_XML'
  EXPORTING
    xdoc = xml_string.
endif.

Getting an error "XML Page can't be displayed".Do anyone here have an idea where I am going wrong.

Thanks,

Kiran.

8 REPLIES 8
Read only

Former Member
0 Likes
1,726

Dear Kiran ,

Instead you can use following FM :

SDIXML_DATA_TO_DOM

SDIXML_DOM_TO_XML

With these FM I am faceing no Issue.

providing my code for your referance. Hope this will help to you.

form GENERATE_XML .

DATA: L_DOM TYPE REF TO IF_IXML_ELEMENT,

M_DOCUMENT TYPE REF TO IF_IXML_DOCUMENT,

G_IXML TYPE REF TO IF_IXML,

W_STRING TYPE XSTRING,

W_SIZE TYPE I,

W_RESULT TYPE I,

W_LINE TYPE STRING,

IT_XML TYPE DCXMLLINES,

S_XML LIKE LINE OF IT_XML,

W_RC LIKE SY-SUBRC.

DATA: XML TYPE DCXMLLINES.

DATA: RC TYPE SY-SUBRC,

BEGIN OF XML_TAB OCCURS 0,

D LIKE LINE OF XML,

END OF XML_TAB.

CLASS CL_IXML DEFINITION LOAD.

G_IXML = CL_IXML=>CREATE( ).

CHECK NOT G_IXML IS INITIAL.

M_DOCUMENT = G_IXML->CREATE_DOCUMENT( ).

CHECK NOT M_DOCUMENT IS INITIAL.

WRITE: / 'Converting DATA TO DOM 1:'.

CALL FUNCTION 'SDIXML_DATA_TO_DOM'

EXPORTING

NAME = 'it_material'

DATAOBJECT = it_material[]

IMPORTING

DATA_AS_DOM = L_DOM

CHANGING

DOCUMENT = M_DOCUMENT

EXCEPTIONS

ILLEGAL_NAME = 1

OTHERS = 2.

IF SY-SUBRC = 0.

WRITE 'Ok'.

ELSE.

WRITE: 'Err =',

SY-SUBRC.

ENDIF.

CHECK NOT L_DOM IS INITIAL.

W_RC = M_DOCUMENT->APPEND_CHILD( NEW_CHILD = L_DOM ).

IF W_RC IS INITIAL.

WRITE 'Ok'.

ELSE.

WRITE: 'Err =',

W_RC.

ENDIF.

CALL FUNCTION 'SDIXML_DOM_TO_XML'

EXPORTING

DOCUMENT = M_DOCUMENT

IMPORTING

XML_AS_STRING = W_STRING

SIZE = W_SIZE

TABLES

XML_AS_TABLE = IT_XML

EXCEPTIONS

NO_DOCUMENT = 1

OTHERS = 2.

IF SY-SUBRC = 0.

WRITE 'Ok'.

ELSE.

WRITE: 'Err =',

SY-SUBRC.

ENDIF.

LOOP AT IT_XML INTO XML_TAB-D.

APPEND XML_TAB.

ENDLOOP.

CALL FUNCTION 'WS_DOWNLOAD'

EXPORTING

BIN_FILESIZE = W_SIZE

FILENAME = 'c:\Label.xml'

FILETYPE = 'BIN'

TABLES

DATA_TAB = XML_TAB

EXCEPTIONS

OTHERS = 10.

IF SY-SUBRC <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

endform. " GENERATE_XML

Regards,

Nikhil

Read only

kiran_k8
Active Contributor
0 Likes
1,726

Do I need to write any specific code in the new transfromation that I created using xslt_tool ?

Thanks,

Kiran.

Read only

Former Member
0 Likes
1,726

I have some questions:

Firstly;Do you want to save XML file to your computer or you wanna just show it?

Secondly; Where does the data come from? Is it from an internal table?

Read only

0 Likes
1,726

Hi,

I am trying both the ways,to shw it on the screen as well as download todesktop and the data comes from internal table.

Thanks

Kiran.

Read only

0 Likes
1,726
TYPE-POOLS truxs.

DATA : gt_mara TYPE TABLE OF mara.                          " OCCURS 1,
DATA : o_xml  TYPE REF TO cl_xml_document.

SELECT *  FROM mara INTO TABLE gt_mara
  UP TO 30 ROWS.

* Create XML Object
CREATE OBJECT o_xml.

* Convert data in table to XML
CALL METHOD o_xml->create_with_data( dataobject = gt_mara[] ).
CLEAR gt_mara.

* Save XML to local PC
CALL METHOD o_xml->export_to_file( filename = 'C:\test2.xml' ).

** Free
*CALL METHOD o_xml->free.
*
** Import XML Document from local PC
*CALL METHOD o_xml->import_from_file( filename = 'C:\test2.xml' ).
*
*CLEAR gt_mara[].
**break tgungor.
*
*** Display XML document
**  CALL METHOD O_XML->DISPLAY.
*
**XML to internal table conversion
*CALL METHOD o_xml->get_data
*  CHANGING
*    dataobject = gt_mara[].
*
*break tgungor.

try this..

Read only

0 Likes
1,726

Hi,

Thanks.

Using your code I was able to download an XML file but when I double click on the xml file it is not showing any data but actually the internal table has data.

If I am not worng we can use even gui_download to do this just by giving the extension name of the file as .xml.Isn't it ?

Thanks,

Kiran,

Read only

0 Likes
1,726

Yes, that is true

Read only

Former Member
0 Likes
1,726

Hi Kiran,

Use this..........

TYPE-POOLS: truxs.

data s_file like RLGRAP-FILENAME.

DATA: itab1 TYPE truxs_t_text_data.

s_file = p_file3.

CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'

EXPORTING

  • I_FIELD_SEPERATOR = ';'

  • I_LINE_HEADER = 'X'

i_filename = s_file

  • I_APPL_KEEP = ' '

tables

i_tab_sap_data = it_slog[]

CHANGING

I_TAB_CONVERTED_DATA = itab1

EXCEPTIONS

CONVERSION_FAILED = 1

OTHERS = 2

.

IF sy-subrc <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.