2006 Nov 01 9:26 AM
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>
2006 Nov 02 5:28 AM
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
2006 Nov 01 9:44 AM
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
2006 Nov 02 1:37 AM
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
2006 Nov 02 5:28 AM
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^
2006 Nov 02 6:24 AM
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
2006 Nov 02 7:29 AM
2006 Nov 07 3:29 AM
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>
2006 Nov 11 8:45 AM
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
2006 Nov 13 1:28 AM
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>
2006 Nov 17 2:14 AM
Hi Raja,
Sorry to trouble u but any luck with the XML i posted here?
regards
Jase
2006 Nov 02 5:30 AM
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.
2006 Nov 17 4:44 AM
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
2006 Nov 17 5:21 AM
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...
2006 Nov 23 9:31 AM
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>
2006 Nov 24 3:12 AM
Hi Sebastian,
it doesnt seem to work. but its close.... care to rectify it?
Really Really Appreciate your help
2006 Nov 24 6:45 AM
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>
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |