Skip to Content
0
Former Member
Jul 06, 2010 at 10:12 AM

ABAP to XML Transformation

393 Views

Hello,

I am using the following in 4.7 Enterprise as well as in ECC 6.0:

CALL TRANSFORMATION yabap_to_xml

SOURCE (gt_source_itab)

RESULT XML gt_itab.

<xsl:output encoding="ISO-8859-1"

From 4.7 Enterprise I am getting the output where as from ECC 6.0 I am getting the error as:

The XML page cannot be displayed

Cannot view XML input using style sheet. Please correct the error and then click the Refresh button, or try again later.

-


Invalid at the top level of the document. Error processing resource 'file:///L:/UCB/DE1 ABAP to XML.xml'. Line 1, Position...

#<?xml version="1.0" encoding="utf-16"?>

Below is the Code:

REPORT yabap_to_xml.

  • ABAP Language Type-Pool

TYPE-POOLS: abap.

CONSTANTS gv_file

TYPE string

VALUE 'L:\UCB\ABAP to XML.xml'.

  • This is the structure for the data to go into the XML file

TYPES: BEGIN OF ts_person,

cust_id(4) TYPE n,

firstname(20) TYPE c,

lastname(20) TYPE c,

END OF ts_person.

  • Table for the XML content

DATA: gt_itab TYPE STANDARD TABLE OF char2048.

  • Table and work area for the data to fill the XML file with

DATA: gt_person TYPE STANDARD TABLE OF ts_person,

gs_person TYPE ts_person.

*Source table that contains references of the internal tables that go

*into the XML file

DATA: gt_source_itab TYPE abap_trans_srcbind_tab,

gs_source_wa TYPE abap_trans_resbind.

  • For error handling

DATA: gs_rif_ex TYPE REF TO cx_root,

gs_var_text TYPE string.

START-OF-SELECTION.

  • Fill the internal table

gs_person-cust_id = '3'.

gs_person-firstname = 'Bill'.

gs_person-lastname = 'Gates'.

APPEND gs_person TO gt_person.

gs_person-cust_id = '4'.

gs_person-firstname = 'Frodo'.

gs_person-lastname = 'Baggins'.

APPEND gs_person TO gt_person.

  • Fill the source table with a reference to the data table.

  • Within the XSLT stylesheet, the data table can be accessed with

  • "IPERSON".

GET REFERENCE OF gt_person INTO gs_source_wa-value.

gs_source_wa-name = 'IPERSON'.

APPEND gs_source_wa TO gt_source_itab.

  • Perform the XSLT stylesheet

TRY.

CALL TRANSFORMATION yabap_to_xml

SOURCE (gt_source_itab)

RESULT XML gt_itab.

CATCH cx_root INTO gs_rif_ex.

gs_var_text = gs_rif_ex->get_text( ).

MESSAGE gs_var_text TYPE 'E'.

ENDTRY.

  • Download the XML file to your client

CALL METHOD cl_gui_frontend_services=>gui_download

EXPORTING

filename = gv_file

CHANGING

data_tab = gt_itab

EXCEPTIONS

file_write_error = 1

no_batch = 2

gui_refuse_filetransfer = 3

invalid_type = 4

no_authority = 5

unknown_error = 6

header_not_allowed = 7

separator_not_allowed = 8

filesize_not_allowed = 9

header_too_long = 10

dp_error_create = 11

dp_error_send = 12

dp_error_write = 13

unknown_dp_error = 14

access_denied = 15

dp_out_of_memory = 16

disk_full = 17

dp_timeout = 18

file_not_found = 19

dataprovider_exception = 20

control_flush_error = 21

not_supported_by_gui = 22

error_no_gui = 23

OTHERS = 24.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output encoding="ISO-8859-1" indent="yes" method="xml" version="1.0"/>

<xsl:strip-space elements="*"/>

<xsl:template match="/">

<CUSTOMERS>

<xsl:apply-templates select="//IPERSON/item"/>

</CUSTOMERS>

</xsl:template>

<xsl:template match="IPERSON/item">

<item>

<customer_id>

<xsl:value-of select="CUST_ID"/>

</customer_id>

<first_name>

<xsl:value-of select="FIRSTNAME"/>

</first_name>

<last_name>

<xsl:value-of select="LASTNAME"/>

</last_name>

</item>

</xsl:template>

</xsl:transform>