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

Transforming XML into Internal Table

Former Member
0 Likes
3,543

Hi guys, I have tried a simple nested code but i fail to write in the Name, Phone and Email portion ... I manage to get to the header level... Can any one gimme some pointers?

PS: I have read to those threads posted here already before I got this far

<b><u>MAIN CODE</u></b>


REPORT  ZTESTJASON11.


TYPES: BEGIN OF T_HEADER,
        NAME(140),
        PHONE(23),
        EMAIL(100),
       END OF T_HEADER,
       D_HEADER TYPE T_HEADER OCCURS 0.

TYPES: BEGIN OF T_ITEM,
        HEADER TYPE D_HEADER,
       END OF T_ITEM,
       D_ITEM TYPE T_ITEM OCCURS 0.

TYPES: BEGIN OF T_LIST,
        ITEM TYPE D_ITEM,
       END OF T_LIST,
       D_LIST TYPE T_LIST OCCURS 0.

TYPES: BEGIN OF TYPE_DATA,
        LIST TYPE D_LIST,
       END OF TYPE_DATA.

DATA: RESPONSE TYPE TABLE OF TYPE_DATA.
DATA: XMLOUT TYPE STRING.
DATA: ITAB LIKE SOLI OCCURS 0 WITH HEADER LINE.

DATA: HEADER_WA    TYPE T_HEADER,
      HEADER_LN    TYPE D_HEADER,
      ITEM_WA      TYPE T_ITEM,
      ITEM_LN      TYPE D_ITEM,
      LIST_WA      TYPE T_LIST,
      LIST_LN      TYPE D_LIST.


MOVE:   'JIM BEAN' TO HEADER_WA-NAME,
        '+6512345678' TO HEADER_WA-PHONE,
        '[email protected]' TO HEADER_WA-EMAIL.

APPEND HEADER_WA TO HEADER_LN.

ITEM_WA-HEADER = HEADER_LN.

APPEND ITEM_WA TO ITEM_LN.

LIST_WA-ITEM = ITEM_LN.
APPEND LIST_WA TO LIST_LN.

myXML-LIST = LIST_LN.


PERFORM UPLOAD_XML.

FORM UPLOAD_XML .

REFRESH ITAB.
clear RESPONSE.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'C:test11.XML'
filetype = 'BIN'
TABLES
data_tab = ITAB.

LOOP AT ITAB.
  CONCATENATE XMLOUT ITAB-LINE INTO XMLOUT.
ENDLOOP.

CALL TRANSFORMATION ('ZTEST11X2A')
SOURCE XML XMLOUT
RESULT RESPONSE = RESPONSE.
BREAK-POINT.
ENDFORM.

<b><u>XML CODE (test11.xml)</u></b>


<?xml version="1.0" encoding="iso-8859-1"?>
<myXML>
  <LIST>
    <ITEM>
      <HEADER>
        <NAME>JIM BEAN</NAME>
        <PHONE>+6512345678</PHONE>
        <EMAIL>[email protected]</EMAIL>
      </HEADER>
    </ITEM>
  </LIST>
</myXML>            

<b><u>XSLT CODE (ZTEST11X2A)</u></b>


<xsl:transform version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:sap="http://www.sap.com/abapxml"
>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml">
<asx:values>
    <RESPONSE>
      <myXML>
       <LIST>
       <ITEM>
        <xsl:for-each select="ITEM">
            <I>
                <HEADER>
                    <NAME> <xsl:value-of select="NAME"/> </NAME>
                    <PHONE> <xsl:value-of select="PHONE"/> </PHONE>
                    <EMAIL> <xsl:value-of select="EMAIL"/> </EMAIL>
                </HEADER>
            </I>
         </xsl:for-each>
         </ITEM>
        </LIST>
        </myXML>
    </RESPONSE>
</asx:values>
</asx:abap>
</xsl:template>

</xsl:transform>

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
2,265

hi

good

go through these weblogs, i hope these ll help u to solve your problem.

/people/tobias.trapp/blog/2006/10/06/xml-processing-in-abap-part-9-150-abap-processing-using-xslt

/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

thanks

mrutyun^

Hi Chee,

Hope this helps you..

Here a successful implementation of Function module "SAP_CONVERT_TO_XML_FORMAT" for users of SAP 46c. It converts an internal table to an xml-table and downloads it.

This code needs 3 variables: FILENAME, XML-document-Name DOC_NAME(freetext) and the internal table (TAB) which you want to convert to XML.

TYPES: TRUXS.

TYPES : BEGIN OF TRUXS_XML_LINE,

DATA(256) TYPE X,

END OF TRUXS_XML_LINE.

TYPES: TYPE_XMLTAB TYPE TABLE OF TRUXS_XML_LINE.

DATA: XMLTAB TYPE TYPE_XMLTAB, BIN_SIZE TYPE I.

data: xml_tab type table of truxs_xml_line,

Xml_tab2 type

CALL FUNCTION 'SAP_CONVERT_TO_XML_FORMAT'

EXPORTING

  • I_FIELD_SEPERATOR = ''

  • I_LINE_HEADER = ''

I_FILENAME = FILENAME

  • I_APPL_KEEP = ''

I_XML_DOC_NAME = DOC_NAME

IMPORTING

PE_BIN_FILESIZE = BIN_SIZE

TABLES

I_TAB_SAP_DATA = TAB

CHANGING

I_TAB_CONVERTED_DATA = XMLTAB

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.

CALL FUNCTION 'WS_DOWNLOAD'

EXPORTING

BIN_FILESIZE = BIN_SIZE

  • CODEPAGE = ' '

FILENAME = FILENAME

FILETYPE = 'BIN'

  • MODE = ' '

  • WK1_N_FORMAT = ' '

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • COL_SELECT = ' '

  • COL_SELECTMASK = ' '

  • NO_AUTH_CHECK = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

DATA_TAB = XMLTAB

  • FIELDNAMES =

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_WRITE_ERROR = 2

INVALID_FILESIZE = 3

INVALID_TYPE = 4

NO_BATCH = 5

UNKNOWN_ERROR = 6

INVALID_TABLE_WIDTH = 7

GUI_REFUSE_FILETRANSFER = 8

CUSTOMER_ERROR = 9

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.

.

IF SY-SUBRC <> 0.

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

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

ENDIF.

Reward Points if this helps.

Manish

15 REPLIES 15
Read only

Former Member
0 Likes
2,265

Hi Chee,

Hope this helps you..

Here a successful implementation of Function module "SAP_CONVERT_TO_XML_FORMAT" for users of SAP 46c. It converts an internal table to an xml-table and downloads it.

This code needs 3 variables: FILENAME, XML-document-Name DOC_NAME(freetext) and the internal table (TAB) which you want to convert to XML.

TYPES: TRUXS.

TYPES : BEGIN OF TRUXS_XML_LINE,

DATA(256) TYPE X,

END OF TRUXS_XML_LINE.

TYPES: TYPE_XMLTAB TYPE TABLE OF TRUXS_XML_LINE.

DATA: XMLTAB TYPE TYPE_XMLTAB, BIN_SIZE TYPE I.

data: xml_tab type table of truxs_xml_line,

Xml_tab2 type

CALL FUNCTION 'SAP_CONVERT_TO_XML_FORMAT'

EXPORTING

  • I_FIELD_SEPERATOR = ''

  • I_LINE_HEADER = ''

I_FILENAME = FILENAME

  • I_APPL_KEEP = ''

I_XML_DOC_NAME = DOC_NAME

IMPORTING

PE_BIN_FILESIZE = BIN_SIZE

TABLES

I_TAB_SAP_DATA = TAB

CHANGING

I_TAB_CONVERTED_DATA = XMLTAB

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.

CALL FUNCTION 'WS_DOWNLOAD'

EXPORTING

BIN_FILESIZE = BIN_SIZE

  • CODEPAGE = ' '

FILENAME = FILENAME

FILETYPE = 'BIN'

  • MODE = ' '

  • WK1_N_FORMAT = ' '

  • WK1_N_SIZE = ' '

  • WK1_T_FORMAT = ' '

  • WK1_T_SIZE = ' '

  • COL_SELECT = ' '

  • COL_SELECTMASK = ' '

  • NO_AUTH_CHECK = ' '

  • IMPORTING

  • FILELENGTH =

TABLES

DATA_TAB = XMLTAB

  • FIELDNAMES =

EXCEPTIONS

FILE_OPEN_ERROR = 1

FILE_WRITE_ERROR = 2

INVALID_FILESIZE = 3

INVALID_TYPE = 4

NO_BATCH = 5

UNKNOWN_ERROR = 6

INVALID_TABLE_WIDTH = 7

GUI_REFUSE_FILETRANSFER = 8

CUSTOMER_ERROR = 9

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.

.

IF SY-SUBRC <> 0.

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

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

ENDIF.

Reward Points if this helps.

Manish

Read only

0 Likes
2,265

Hi Kumar Thanx for your answer but I have no issues converting from Abap to XML. I only have problems converting from <b><u>XML to ABAP internal table</u></b>. ")

Anyone please help coz i really need to solve this points will be rewarded

Read only

Former Member
0 Likes
2,266

hi

good

go through these weblogs, i hope these ll help u to solve your problem.

/people/tobias.trapp/blog/2006/10/06/xml-processing-in-abap-part-9-150-abap-processing-using-xslt

/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

thanks

mrutyun^

Read only

0 Likes
2,265

Thanks Mrutyun!

Well the first link is helpful i will read thru it see if can get something out of it. As for the 2nd method I am aware of it and I am able to do it using DOM but I am more keen in using the transformation method via XSLT. I have rewarded u points...")

thanks Amit Mittal but I have to define the XSLT before I am able to write it into a nested itab. the 'ID' will only work for simple transformation not for my case. thanks anyway

Any one with solution to tis XSLT is still open

Read only

0 Likes
2,265

Hi,

check this thread i have already given the complete solution (code) for transforming XML to nested ITAB.

Regards

Raja

Read only

0 Likes
2,265

Hi Raja,

this thread where u provided the full solution have helped me through alot but I am still stucked at reading the values of <NAME>, <PHONE> and <EMAIL>. I still not able to retrieve the values from these tags. For the past weeks I have tried various methods but it was to no avail... I hope its not too much to seek your assistance here... I really appreciate if u or anyone can solve tis here... Points will be rewarded..

thanx

<b><u>My Current XSLT</u></b>

<xsl:transform version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:sap="http://www.sap.com/abapxml"
>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml">
<asx:values>
      <RESPONSE>
      <myXML>
       <LIST>
        <ITEM>
        <xsl:for-each select="ITEM">
            <dataset1>
                    <HEADER>
                    <xsl:for-each select="HEADER">
                    <dataset2>
                            <NAME>
                                <xsl:value-of select="NAME"/>
                            </NAME>
                            <PHONE>
                                <xsl:value-of select="PHONE"/>
                            </PHONE>
                            <EMAIL>
                                <xsl:value-of select="EMAIL"/>
                            </EMAIL>
                   </dataset2>
                   </xsl:for-each>
                   </HEADER>
            </dataset1>
         </xsl:for-each>
        </ITEM>
        </LIST>
        </myXML>
        </RESPONSE>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform>

Read only

0 Likes
2,265

Sorry about the delay, i was away attending TechEd at Bangalore.

Can you provide me the following to check.

1. the itab declaration to which you are trying to transform the xml

2. the actual xml

3. the xslt

Regards

Raja

Read only

0 Likes
2,265

Thanks a million in advance Raja, thanks for ur help, realli appreaciate it! ")

Here it is...

<u><b>MAIN CODE (itab declaration)</b></u>

REPORT  ZTESTJASON11.
 
 
TYPES: BEGIN OF T_HEADER,
        NAME(140),
        PHONE(23),
        EMAIL(100),
       END OF T_HEADER,
       D_HEADER TYPE T_HEADER OCCURS 0.
 
TYPES: BEGIN OF T_ITEM,
        HEADER TYPE D_HEADER,
       END OF T_ITEM,
       D_ITEM TYPE T_ITEM OCCURS 0.
 
TYPES: BEGIN OF T_LIST,
        ITEM TYPE D_ITEM,
       END OF T_LIST,
       D_LIST TYPE T_LIST OCCURS 0.
 
TYPES: BEGIN OF TYPE_DATA,
        LIST TYPE D_LIST,
       END OF TYPE_DATA.
 
DATA: RESPONSE TYPE TABLE OF TYPE_DATA.
DATA: XMLOUT TYPE STRING.
DATA: ITAB LIKE SOLI OCCURS 0 WITH HEADER LINE.
 
DATA: HEADER_WA    TYPE T_HEADER,
      HEADER_LN    TYPE D_HEADER,
      ITEM_WA      TYPE T_ITEM,
      ITEM_LN      TYPE D_ITEM,
      LIST_WA      TYPE T_LIST,
      LIST_LN      TYPE D_LIST.
 
 
MOVE:   'JIM BEAN' TO HEADER_WA-NAME,
        '+6512345678' TO HEADER_WA-PHONE,
        '[email protected]' TO HEADER_WA-EMAIL.
 
APPEND HEADER_WA TO HEADER_LN.
 
ITEM_WA-HEADER = HEADER_LN.
 
APPEND ITEM_WA TO ITEM_LN.
 
LIST_WA-ITEM = ITEM_LN.
APPEND LIST_WA TO LIST_LN.
 
myXML-LIST = LIST_LN.
 
 
PERFORM UPLOAD_XML.
 
FORM UPLOAD_XML .
 
REFRESH ITAB.
clear RESPONSE.
 
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'C:test11.XML'
filetype = 'BIN'
TABLES
data_tab = ITAB.
 
LOOP AT ITAB.
  CONCATENATE XMLOUT ITAB-LINE INTO XMLOUT.
ENDLOOP.
 
CALL TRANSFORMATION ('ZTEST11X2A')
SOURCE XML XMLOUT
RESULT RESPONSE = RESPONSE.
BREAK-POINT.
ENDFORM.

<u><b>XML CODE (test11.xml)</b></u>

<?xml version="1.0" encoding="iso-8859-1"?>
<myXML>
  <LIST>
    <ITEM>
      <HEADER>
        <NAME>JIM BEAN</NAME>
        <PHONE>+6512345678</PHONE>
        <EMAIL>[email protected]</EMAIL>
      </HEADER>
    </ITEM>
  </LIST>
</myXML>           

<u><b>XSLT CODE (ZTEST11X2A)</b></u>

<xsl:transform version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:sap="http://www.sap.com/abapxml"
>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml">
<asx:values>
      <RESPONSE>
      <myXML>
       <LIST>
        <ITEM>
        <xsl:for-each select="ITEM">
            <dataset1>
                    <HEADER>
                    <xsl:for-each select="HEADER">
                    <dataset2>
                            <NAME>
                                <xsl:value-of select="NAME"/>
                            </NAME>
                            <PHONE>
                                <xsl:value-of select="PHONE"/>
                            </PHONE>
                            <EMAIL>
                                <xsl:value-of select="EMAIL"/>
                            </EMAIL>
                   </dataset2>
                   </xsl:for-each>
                   </HEADER>
            </dataset1>
         </xsl:for-each>
        </ITEM>
        </LIST>
        </myXML>
        </RESPONSE>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform>

Read only

0 Likes
2,265

Hi Raja,

Sorry to trouble u but any luck with the XML i posted here?

regards

Jase

Read only

Former Member
0 Likes
2,265

Hi chee,

1. itab --- > xml

xml ---> itab.

2. This program will do both.

(just copy paste in new program)

3.

REPORT abc.

*----


DATA

DATA : t001 LIKE TABLE OF t001 WITH HEADER LINE.

DATA : BEGIN OF itab OCCURS 0,

a(100) TYPE c,

END OF itab.

DATA: xml_out TYPE string .

DATA : BEGIN OF upl OCCURS 0,

f(255) TYPE c,

END OF upl.

DATA: xmlupl TYPE string .

                                                              • FIRST PHASE

                                                              • FIRST PHASE

                                                              • FIRST PHASE

*----


Fetch Data

SELECT * FROM t001 INTO TABLE t001.

*----


XML

CALL TRANSFORMATION ('ID')

SOURCE tab = t001[]

RESULT XML xml_out.

*----


Convert to TABLE

CALL FUNCTION 'HR_EFI_CONVERT_STRING_TO_TABLE'

EXPORTING

i_string = xml_out

i_tabline_length = 100

TABLES

et_table = itab.

*----


Download

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

filetype = 'BIN'

filename = 'd:\xx.xml'

TABLES

data_tab = itab.

                                                              • SECOND PHASE

                                                              • SECOND PHASE

                                                              • SECOND PHASE

BREAK-POINT.

REFRESH t001.

CLEAR t001.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = 'D:\XX.XML'

filetype = 'BIN'

TABLES

data_tab = upl.

LOOP AT upl.

CONCATENATE xmlupl upl-f INTO xmlupl.

ENDLOOP.

*----


XML

CALL TRANSFORMATION ('ID')

SOURCE XML xmlupl

RESULT tab = t001[]

.

BREAK-POINT.

regards,

amit m.

Read only

meikandan_krishnan2
Participant
0 Likes
2,265

Hi Jason

Are u facing problem in the xml file which you uploaded to the internal table??

What exactly you want to do in this program??

regards

mei

Read only

0 Likes
2,265

Hi there!

Well what I am trying to do here is to do a transformation of this XML file using XSLT into a Nested Internal Table.

The program will read in a XML file and transform the XML into a nested internal table. Transformation is done using

CALL TRANSFORMATION('ZTEST11X2A')

. ZTEST11X2A is the XSLT defining the transformation...

Do refer to the previous post in this thread for the Codes, XML file as well as my current XSLT which have problem reading tags under the <header> tag. In another words it is able to read in until <HEADER> level into the tables, the subsequent are not read in....

I hope I am clear with my explaination... so all i need here is someone to look at my XSLT see whats wrong with it... y it is not able to work...

Read only

Former Member
0 Likes
2,265

hello,

try the following xslt code.

regards

sebastian


<xsl:transform version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:sap="http://www.sap.com/abapxml"
>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml">
<asx:values>
      <RESPONSE>
             <RESPONSE>
                <xsl:for-each select="/myXML/LIST/ITEM/HEADER">
                  <TYPE_DATA>
                    <NAME><xsl:value-of select="NAME"/></NAME>
                    <PHONE><xsl:value-of select="PHONE"/></PHONE>
                    <EMAIL><xsl:value-of select="EMAIL"/></EMAIL>
                   </TYPE_DATA>
                </xsl:for-each>
              </RESPONSE>
       </RESPONSE>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform>

Read only

0 Likes
2,265

Hi Sebastian,

it doesnt seem to work. but its close.... care to rectify it?

Really Really Appreciate your help

Read only

Former Member
0 Likes
2,265

Hi Guys thanks for your help I did manage to solve it myself already. Heres the codes for everyones reference ")

<u><b>PROGRAM</b></u>

TYPES: BEGIN OF T_ATTACHMENT,
        LINE_NO(5),
        FILENAME(200),
        DESCRIPTION TYPE STRING,
       END OF T_ATTACHMENT,
       D_ATTACHMENT TYPE T_ATTACHMENT OCCURS 0.

TYPES: BEGIN OF T_ATTACHMENTLIST,
        ATTACHMENT TYPE D_ATTACHMENT,
       END OF T_ATTACHMENTLIST,
       D_ATTACHMENTLIST TYPE T_ATTACHMENTLIST OCCURS 0.

TYPES: BEGIN OF T_HEADER,
        NAME(140),
        PHONE(23),
        EMAIL(100),
        ATTACHMENTLIST TYPE D_ATTACHMENTLIST,
       END OF T_HEADER,
       D_HEADER TYPE T_HEADER OCCURS 0.

TYPES: BEGIN OF T_ITEM,
        HEADER TYPE D_HEADER,
       END OF T_ITEM.
TYPES:D_ITEM TYPE T_ITEM OCCURS 0.

TYPES: BEGIN OF T_LIST,
        ITEM TYPE D_ITEM,
       END OF T_LIST,
       D_LIST TYPE T_LIST OCCURS 0.

TYPES: BEGIN OF TYPE_DATA,
        LIST TYPE D_LIST,
       END OF TYPE_DATA.

DATA: ITEMLIST TYPE STANDARD TABLE OF T_LIST INITIAL SIZE 0.
DATA: XMLOUT TYPE STRING.
DATA: ITAB LIKE SOLI OCCURS 0 WITH HEADER LINE.

PERFORM UPLOAD_XML.


*&---------------------------------------------------------------------*
*&      Form  UPLOAD_XML
*&----------------------------------  -----------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM UPLOAD_XML .

REFRESH ITAB.
clear ITEMLIST.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'C:test11.XML'
filetype = 'BIN'
TABLES
data_tab = ITAB.

LOOP AT ITAB.
  CONCATENATE XMLOUT ITAB-LINE INTO XMLOUT.
ENDLOOP.

CALL TRANSFORMATION ('ZTEST11X2A')
SOURCE XML XMLOUT
RESULT ITEMLIST = ITEMLIST.
BREAK-POINT.
ENDFORM.

<b><u>XSLT</u></b>

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/abapxml" version="1.0">
  <xsl:template match="/">
    <asx:abap xmlns:asx="http://www.sap.com/abapxml">
      <asx:values>
       <xsl:for-each select="myXML">
        <ITEM>
          <xsl:for-each select="ITEM">
            <I>
              <HEADER>
                <xsl:for-each select="HEADER">
                  <H>
                    <NAME>
                      <xsl:value-of select="NAME"/>
                    </NAME>
                    <PHONE>
                      <xsl:value-of select="PHONE"/>
                    </PHONE>
                    <EMAIL>
                      <xsl:value-of select="EMAIL"/>
                    </EMAIL>
                  </H>
                </xsl:for-each>
              </HEADER>
            </I>
          </xsl:for-each>
        </ITEM>
        </xsl:for-each>
      </asx:values>
    </asx:abap>
  </xsl:template>
</xsl:transform>