WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Abap Xml (http://www.wcm.at/forum/showthread.php?t=169891)

Sportfreund 15.07.2005 08:24

Abap Xml
 
Hallo,

Hat jemand von euch Erfahrungen mit xml in Abap(SAP). Hab ein kleines Testproggi geschrieben mit welchem ich ein xml File einlesen kann und die Daten herausbekomme. Das funktioniert schon, jetzt möchte ich das ganze in die andere Richtung machen. Selbst mit ein paar Testdaten ein XML File erzeugen und dann in ne XML Datei schreiben, nur haut das nicht hin.

Hier der Code dazu:

REPORT z_create_xml .

TYPE-POOLS: ixml.
CLASS cl_ixml DEFINITION LOAD.

DATA: g_ixml TYPE REF TO if_ixml.
g_ixml = cl_ixml=>create( ).

* create empty xml document
DATA: document TYPE REF TO if_ixml_document.
document = g_ixml->create_document( ).

* adding elements to the DOM tree
DATA: element TYPE REF TO if_ixml_element,
element2 TYPE REF TO if_ixml_element,
element3 TYPE REF TO if_ixml_element,
rc TYPE i.

element = document->create_element( name = 'person' ).
element2 = document->create_element( name = 'firstname' ).
element3 = document->create_element( name = 'lastname' ).
rc = document->append_child( element ).
rc = document->append_child( element ).
rc = document->append_child( element ).

* adding text date into the DOM tree
DATA: firstname TYPE REF TO if_ixml_text,
lastname TYPE REF TO if_ixml_text.

firstname = document->create_text( 'Manuel' ).
lastname = document->create_text( 'Silbernagel' ).

rc = element2->append_child( firstname ).
rc = element3->append_child( lastname ).

*create xml-file

DATA: streamfactory TYPE REF TO if_ixml_stream_factory,
ostream TYPE REF TO if_ixml_ostream.

* create stream-factory
streamfactory = g_ixml->create_stream_factory( ).
ostream = streamfactory->create_ostream_uri(
system_id = 'C:\out.xml' ).

DATA: renderer TYPE REF TO if_ixml_renderer.
* rc type i.

renderer = g_ixml->create_renderer( ostream = ostream
document = document ).
rc = renderer->render( ).
write: / rc.

Fehler bekomme ich keinen, jedoch passiert nichts. Hat jemand ne Idee wo das Problem liegt bzw. warum nichts passiert?

Shadow 15.07.2005 08:51

Mit XML hab ich noch nichts gemacht.

Aber hier gibts ein Beispiel für Interne Tabelle -> XML.

http://www.sapgenie.com/abap/code/abap27.htm

Ist halt spanisch, aber das sollte nicht stören.

Sportfreund 15.07.2005 09:05

Das ist mir doch im wahrsten Sinne des Wortes ein wenig spanisch. Also recht Blick ich da nicht durch, vor allem ist das total anders gemacht als wie ich das gmacht hab laut diesem Dokument:

http://help.sap.com/saphelp_nw04/hel...11/content.htm

Sportfreund 15.07.2005 10:34

habs jetzt mal so weit, dass ich mir den dom ausgeben kann und nun wird mir das xml file schön angezeigt, nur wie schreib ich dieses xml-file in eine datei?

Shadow 15.07.2005 11:15

In dem spanischen Beispiel wird die interne XML-Tabelle einfach mit der "WS_DOWNLOAD" Funktion als "BIN" Datei abgespeichert (ganz am Ende vom Quellcode).

Sportfreund 15.07.2005 12:00

ja habs jetzt auch nochmal durchgeackert und es versucht auch so zu machen, nur bei mir schmeißts mich irgendwo beim speichern meiner internen tabelle. anbei mein code, vielleicht kannst ihn dir mal durchsehen ob du beim ws_download nen fehler findest... --> Danke schonmal!

*&---------------------------------------------------------------------*
*& Report Z_XML_CREATE *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------*

REPORT z_xml_create .

TYPE-POOLS truxs.

DATA: it_table LIKE npat OCCURS 0.

DATA: l_dom TYPE REF TO if_ixml_element,
m_document TYPE REF TO if_ixml_document,
g_ixml TYPE REF TO if_ixml,
m_xmldoc TYPE REF TO cl_xml_document,
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,
l_iref_pstreamfactory TYPE REF TO if_ixml_stream_factory,
l_iref_postream TYPE REF TO if_ixml_ostream,
it_converted_data TYPE truxs_xml_table,
it_converted_line LIKE LINE OF it_converted_data,
* w_result TYPE I,
* w_rc like sy-subrc,
s_node TYPE string.



START-OF-SELECTION.
SELECT * FROM npat INTO TABLE it_table
UP TO 10 ROWS.

END-OF-SELECTION.
********************************************
**** initialize iXML-Framework ****
********************************************
WRITE / 'initialiazing iXML:'.
CLASS cl_ixml DEFINITION LOAD.
g_ixml = cl_ixml=>create( ).
CHECK NOT g_ixml IS INITIAL.
WRITE: 'ok'.

********************************************
**** create DOM from SAP data ****
********************************************
WRITE / 'creating iXML doc:'.
m_document = g_ixml->create_document( ).
CHECK NOT m_document IS INITIAL.
WRITE: 'ok'.

WRITE / 'converting DATA TO DOM 1:'.
CALL FUNCTION 'SDIXML_DATA_TO_DOM'
EXPORTING
name = 'IT_TABLE'
dataobject = it_table
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.

WRITE / 'appending DOM to iXML doc:'.
w_rc = m_document->append_child( new_child = l_dom ).
IF w_rc IS INITIAL.
WRITE 'ok'.
ELSE.
WRITE: 'Err =', w_rc.
ENDIF.

********************************************
**** visualize iXML (DOM) ****
********************************************
WRITE / 'displaying DOM:'.
CALL FUNCTION 'SDIXML_DOM_TO_SCREEN'
EXPORTING
document = m_document
EXCEPTIONS
no_document = 1
OTHERS = 2.
IF sy-subrc = 0.
WRITE 'ok'.
ELSE.
WRITE: 'Err =', sy-subrc.
ENDIF.


********************************************
**** create xml-file ****
********************************************
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.


********************************************
**** ws_download into out.xml ****
********************************************
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
bin_filesize = w_size
filename = 'C:\out.xml'
filetype = 'BIN'
TABLES
data_tab = it_xml
EXCEPTIONS
OTHERS = 10.
IF sy-subrc <> 0.
WRITE: / 'Error occurred'.
ELSE.
WRITE: / 'XML FILE WRITTEN'.
ENDIF.

Sportfreund 15.07.2005 12:13

hab den fehler beim ws_download nun behoben, nun funkts, das xml-file wird erstellt, nur schaut dieses nicht so aus wie ein xml file.

kleiner auszug:
<?xml version="1.0" encoding="utf-8"?><IT_TABLE><item><MANDT>128</MANDT><PATNR>0002000001</PATNR><EINRI>0001</EINRI><GSCHL>1</GSCHL><NNAME>Pitz</NNAME><NNAMS>PITZ</NNAMS><VNAME>Harald 1. Test</VNAME><VNAMS>HARALD1.TEST</VNAMS><GBDAT>1934-01-12</GBDAT><GBNAM>Pitz</GBNAM><GBNAS>PITZ</GBNAS><GLAND>DE</GLAND><TODDT>0000-00-00</TODDT><TODZT>00:00:00</TODZT><TODDB>0000-00-00</TODDB><TODZB>00:00:00</TODZB><ANRED>01</ANRED><FAMST>0</FAMST><NATIO>DE</NATIO><SPRAS>D</SPRAS><LAND>DE</LAND><PSTLZ>69254</PSTLZ><ORT>Malsch</ORT><STRAS>Wolfsheck 15</STRAS><AGLAN>DE</AGLAN><ANNA1>Pitz</ANNA1><ANLA1>DE</ANLA1><ANPL1>69254</ANPL1><ANOR1>Malsch</ANOR1><ANST1>Wolfsheck 15</ANST1><BEGDT>0000-00-00</BEGDT><ENDDT>0000-00-00</ENDDT><PZIFF>7</PZIFF><ERDAT>1999-03-30</ERDAT><ERUSR>PITZH</ERUSR><UPDAT>0000-00-00</UPDAT><STDAT>0000-00-00</STDAT><ADRNR>0000010359</ADRNR><ADROB>NPAT</ADROB><ADNAG>0000010360</ADNAG><ADOAG>NPAG</ADOAG><ADNN1>0000010361</ADNN1><ADON1>NPAN</ADON1><ADRO2>NPAT</ADRO2><USER3>0000-00-00</USER3><USER4>0000-00-00</USER4></item><item><MANDT>128</MANDT><PATNR>0002000002</PATNR><EINRI>0001</EINRI><GSCHL>1</GSCHL><NNAME>Pitz</NNAME><NNAMS>PITZ</NNAMS><VNAME>Euro</VNAME><VNAMS>EURO</VNAMS><GBDAT>1965-07-31</GBDAT><GBNAM>Pitz</GBNAM><GBNAS>PITZ</GBNAS><GLAND>DE</GLAND><TODDT>0000-00-00</TODDT><TODZT>00:00:00</TODZT><TODDB>0000-00-00</TODDB><TODZB>00:00:00</TODZB><ANRED>01</ANRED><NATIO>DE</NATIO><SPRAS>D</SPRAS><LAND>DE</LAND><PSTLZ>69254</PSTLZ><ORT>Malsch</ORT><STRAS>Testallee 15</STRAS><AGLAN>DE</AGLAN><ANNA1>Pitz</ANNA1><ANLA1>DE</ANLA1><ANPL1>69254</ANPL1><ANOR1>Malsch</ANOR1><ANST1>Testallee 15</ANST1><BEGDT>0000-00-00</BEGDT><ENDDT>0000-00-00</ENDDT><PZIFF>5</PZIFF><ERDAT>1999-04-08</ERDAT><ERUSR>PITZH</ERUSR><UPDAT>0000-00-00</UPDAT><STDAT>0000-00-00</STDAT><ADRNR>0000010366</ADRNR><ADROB>NPAT</ADROB><ADNAG>0000010367</ADNAG><ADOAG>NPAG</ADOAG><ADNN1>0000010368</ADNN1><ADON1>NPAN</ADON1><ADRO2>NPAT</ADRO2><USER3>0000-00-00</USER3><USER4>0000-00-00</USER4></item><item><MANDT>128</MANDT><PATNR>0002000003</PATNR><EINRI>

hat jemand ne idee wie ich das machen kann dass ich auch das schöne xml format bekomme?

Sportfreund 15.07.2005 12:17

bitte vergessts mein vorheriges posting. i bin so ein dodl!

ich hab des .xml file mitn editor aufgemacht. kein wunder dass das so scheiße aussieht!!! argggggggggg

mitn internetexplorer schauts ganz normal und supi aus!

grüße!

Sportfreund 15.07.2005 12:19

mhm shit, hab jetzt ein anderes .xml file im editor aufgemacht und das sieht auch dort normal aus...

macht das probs bei meinem file wenn man datentransfer mit dem xml-file macht?

Shadow 15.07.2005 13:18

Die Frage ist natürlich, ob es im Editor überhaupt richtig aussehen muss.
Wenn es von Programmen, welche XML importieren können, richtig erkannt wird sollte das reichen.

(möglicherweise fehlt für die richtige Darstellung im Editor nur das Linefeed und Carriage-Return jeweils am Zeilenende. )


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag