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: 

Converting Xml to ABAP and Vice Versa

Former Member
0 Kudos

Hi All,

i need to convet the xml to internal table and internal table to xml . As per the customer specific XML schema.

my xml schema is

<AAA_ACS_XML>

<SEGMENT_VALUES>

<SEG_VAL>1100000000000000</SEG_VAL>

<SEG_DESC>*</SEG_DESC>

<SEG_FROM>00000000</SEG_FROM>

<SEG_TO>00000000</SEG_TO>

<SEG_STATUS>UPDATE</SEG_STATUS>

<SEG_INACT_FLAG></SEG_INACT_FLAG>

</SEGMENT_VALUES>

<SEGMENT_VALUES>

<SEG_VAL>1100000000010000</SEG_VAL>

<SEG_DESC>*</SEG_DESC>

<SEG_FROM>00000000</SEG_FROM>

<SEG_TO>00000000</SEG_TO>

<SEG_STATUS>UPDATE</SEG_STATUS>

<SEG_INACT_FLAG></SEG_INACT_FLAG>

</SEGMENT_VALUES>

</AAA_ACS_XML>

i have done the xlst taransformation in strans tcode , as below

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">

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

<xsl:template match="/">

<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">

<asx:values>

<AAA_ACS_XML>

<xsl:apply-templates select="//SEGMENT_VALUES"/>

</AAA_ACS_XML>

</asx:values>

</asx:abap>

</xsl:template>

<xsl:template match="SEGMENT_VALUES">

<item>

<SEGF1>

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

</SEGF1>

<SEGF2>

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

</SEGF2>

<SEGF3>

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

</SEGF3>

<SEGF4>

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

</SEGF4>

<SEGF5>

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

</SEGF5>

<SEGF6>

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

</SEGF6>

</item>

</xsl:template>

</xsl:transform>

in this after item tag <segf1 > is my internal table field , and i tried using the xml tag as <SEG_VAL>. and i did the code in abap as

below

REPORT YV_XML_CONV.

TYPE-POOLS: ABAP.

DATA: gt_result_xml type abap_trans_resbind_tab,

gs_result_xml type abap_trans_resbind.

  • Table for the XML content

data: gt_xml type standard table of char2048,

gt_xml3 type standard table of char2048,

gt_xml1 type xstring,

gt_xml2 type string,

gv_len type i,

gv_line type i,

gv_file1(100) type c.

  • For error handling

data: gs_rif_ex type ref to cx_root,

gs_var_text type string.

DATA: BEGIN OF ktab OCCURS 0,

name TYPE string,

price TYPE string,

description TYPE string,

calories TYPE string,

END OF ktab.

DATA: BEGIN OF jtab OCCURS 0,

  • mcode TYPE string,

  • dcode TYPE string,

  • segno TYPE string,

segf1 TYPE string,

segf2 TYPE string,

segf3 TYPE string,

segf4 TYPE string,

segf5 TYPE string,

segf6 TYPE string,

END OF jtab.

DATA: xml_out TYPE string .

DATA : BEGIN OF upl OCCURS 0,

f TYPE xstring,

END OF upl.

DATA : BEGIN OF itab OCCURS 0,

a(100) TYPE c,

END OF itab.

DATA: xmlupl TYPE string .

BREAK-POINT .

*selection screen

selection-screen begin of block b3 with frame.

parameter: p_file1 like dynpread-fieldname lower case DEFAULT '/tmp/final1.xml'.

selection-screen comment /1(30) comm.

selection-screen end of block b3.

gv_file1 = p_file1.

*open file

open dataset gv_file1 for input in binary mode .

  • Transferring Data

read dataset gv_file1 into gt_xml1.

  • Closing the File

close dataset gv_file1.

*convert xstring to string

data: l_convout type ref to cl_abap_conv_in_ce,

l_msgstr type string,

ex_len type i.

try.

l_convout = cl_abap_conv_in_ce=>create(

encoding = 'UTF-8'

input = gt_xml1 ).

l_convout->read( importing data = gt_xml2 ).

catch cx_root.

l_msgstr = text-001.

message l_msgstr type 'E'.

endtry.

*convert string to ftext

call function 'SCMS_STRING_TO_FTEXT'

exporting

text = gt_xml2

tables

ftext_tab = gt_xml3.

*convert ftext to text

describe table gt_xml3 lines gv_line.

gv_len = gv_line * 2048.

call function 'SCMS_FTEXT_TO_TEXT'

exporting

input_length = gv_len

tables

ftext_tab = gt_xml3

text_tab = gt_xml.

get reference of jtab into gs_result_xml-value.

gs_result_xml-name = 'GEBIZ_ACS_XML'.

append gs_result_xml to gt_result_xml.

try.

*----


XML

CALL TRANSFORMATION ('YLEARN')

SOURCE XML gt_xml

RESULT tab = jtab[].

  • (gt_result_xml)

  • .

catch cx_root into gs_rif_ex.

gs_var_text = gs_rif_ex->get_text( ).

message gs_var_text type 'E'.

endtry.

BREAK-POINT.

But i the value is not populating in to the internal table . i dont know why ,but no error,not going for dump.but internal table is empty . Please let me know . how to do this xlst conversion. if u know other approach also plz tell me .

Reply's are immediately rewarded , if useful.

Thanks

vinoth.v

1 ACCEPTED SOLUTION

uwe_schieferstein
Active Contributor
0 Kudos

Hello Vinoth

The "itab" within you transformed XML corresponds to element <AAA_ACS_XML>.

Thus, you have to call the result in the XSLT transformation accordingly (see below):


<?xml version="1.0" encoding="ISO-8859-1"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
    <asx:values>
        <AAA_ACS_XML>      " <<<
            <item>
                <SEGF1>1100000000000000</SEGF1>
                <SEGF2>*</SEGF2>
                <SEGF3>00000000</SEGF3>
                <SEGF4>00000000</SEGF4>
                <SEGF5>UPDATE</SEGF5>
                <SEGF6/>
            </item>
            <item>
                <SEGF1>1100000000010000</SEGF1>
                <SEGF2>*</SEGF2>
                <SEGF3>00000000</SEGF3>
                <SEGF4>00000000</SEGF4>
                <SEGF5>UPDATE</SEGF5>
                <SEGF6/>
            </item>
        </AAA_ACS_XML>
    </asx:values>
</asx:abap>

Regards

Uwe


...
    CALL TRANSFORMATION ('YLEARN')
    SOURCE XML gt_xml
    RESULT AAA_ACS_XML = jtab[].    " <<< itab = AAA_ACS_XML
...

Regards

Uwe

1 REPLY 1

uwe_schieferstein
Active Contributor
0 Kudos

Hello Vinoth

The "itab" within you transformed XML corresponds to element <AAA_ACS_XML>.

Thus, you have to call the result in the XSLT transformation accordingly (see below):


<?xml version="1.0" encoding="ISO-8859-1"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
    <asx:values>
        <AAA_ACS_XML>      " <<<
            <item>
                <SEGF1>1100000000000000</SEGF1>
                <SEGF2>*</SEGF2>
                <SEGF3>00000000</SEGF3>
                <SEGF4>00000000</SEGF4>
                <SEGF5>UPDATE</SEGF5>
                <SEGF6/>
            </item>
            <item>
                <SEGF1>1100000000010000</SEGF1>
                <SEGF2>*</SEGF2>
                <SEGF3>00000000</SEGF3>
                <SEGF4>00000000</SEGF4>
                <SEGF5>UPDATE</SEGF5>
                <SEGF6/>
            </item>
        </AAA_ACS_XML>
    </asx:values>
</asx:abap>

Regards

Uwe


...
    CALL TRANSFORMATION ('YLEARN')
    SOURCE XML gt_xml
    RESULT AAA_ACS_XML = jtab[].    " <<< itab = AAA_ACS_XML
...

Regards

Uwe