Interne Tabelle als xml Datei auf einem Applikationsserver speichern

Getting started ... Alles für einen gelungenen Start.
3 Beiträge • Seite 1 von 1
3 Beiträge Seite 1 von 1

Interne Tabelle als xml Datei auf einem Applikationsserver speichern

Beitrag von lisa (ForumUser / 53 / 8 / 1 ) »
Hallo zusammen,

ich brauche Eure Hilfe. Ich möchte eine interne Tabelle als XML Datei auf einem Applikationsserver speichern und habe ein Programm geschrieben. Soweit konnte ich die XML Datei auf dem Server ablegen, aber nur die folgende Zeile wurde ausgegeben:
<?XML Version="1.0" Encoding="utf-8"?>
Ich möchte auch den Inhalt von der internen Tabelle mara als XML Struktur ausgeben, aber ich weiß nicht wie ich das mache. Folgendes ist mein Coding:

Code: Alles auswählen.

DATA it_itab TYPE STANDARD TABLE OF mara.
 
SELECT * FROM mara INTO TABLE it_itab UP TO 10 ROWS.
 
DATA(o_writer_itab_xml) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_xml10 ).
CALL TRANSFORMATION id SOURCE values = it_itab RESULT XML o_writer_itab_xml.
DATA(itab_xml) = cl_abap_codepage=>convert_from( o_writer_itab_xml->get_output( ) ).

* ixml Factory
  DATA(o_ixml) = cl_ixml=>create( ).
 
* DOM Object Model
  DATA(o_doc) = o_ixml->create_document( ).
   
* XML-Dokument rendern
  DATA(o_sf) = o_ixml->create_stream_factory( ).
 
* Encoding UTF-8
  DATA(o_encoding) = o_ixml->create_encoding( character_set = 'UTF-8'
                                              byte_order = if_ixml_encoding=>co_none ).
 
* Stream für Ausgabe in Datei '/tmp/test/test.xml' auf dem Applikationsserver
  DATA(o_stream) = o_sf->create_ostream_uri( system_id = '/tmp/test/test.xml' ).
  o_stream->set_encoding( encoding = o_encoding ).
  o_stream->set_pretty_print( pretty_print = abap_true ).
 
* Render-Objekt
  DATA(o_render) = o_ixml->create_renderer( ostream  = o_stream
                                            document = o_doc ).
 
* XML-String in Datei auf Applikationsserver generieren
  DATA(lv_rc) = o_render->render( ).
 
* Dateigröße in Bytes
  DATA(lv_size) = o_stream->get_num_written_raw( ).
   
* Stream schließen
  o_stream->close( ).
 
Ich komme wirklich nicht weiter und freue mich auf jede Antwort.

Viele Grüße
lisa

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Interne Tabelle als xml Datei auf einem Applikationsserver speichern

Beitrag von jocoder (Specialist / 343 / 3 / 102 ) »
Es gibt 2 Arten von XML-Bibliotheken:
1. SXML
2. IXML
Beide werden hier gemischt, was nicht notwendig ist.

Mit der SXML-Bibliothek und ohne Pretty-Print kann das Programm deutlich schlanker gestaltet werden:

Code: Alles auswählen.

DATA it_material_master_records TYPE STANDARD TABLE OF mara.
 
SELECT * FROM mara INTO TABLE it_material_master_records UP TO 10 ROWS.
 
DATA(o_writer_itab_xml) = cl_sxml_dataset_writer=>create( filename = '/tmp/test/test.xml' ).
CALL TRANSFORMATION id SOURCE values = it_material_master_records RESULT XML o_writer_itab_xml.

o_writer_itab_xml->close( ).
Mit der IXML sieht es dann wie folgt aus:

Code: Alles auswählen.

SELECT * FROM mara INTO TABLE it_material_master_records UP TO 10 ROWS.

DATA(o_ixml) = cl_ixml=>create( ).
 
DATA(o_document) = o_ixml->create_document( ).
CALL TRANSFORMATION id SOURCE values = it_material_master_records RESULT XML o_document.

DATA(o_sf) = o_ixml->create_stream_factory( ).
 
* Encoding UTF-8
DATA(o_encoding) = o_ixml->create_encoding( character_set = 'UTF-8'
                                              byte_order = if_ixml_encoding=>co_none ).
 
* Stream für Ausgabe in Datei '/tmp/test/test.xml' auf dem Applikationsserver
DATA(o_stream) = o_sf->create_ostream_uri( system_id = '/tmp/test/test.xml' ).
o_stream->set_encoding( encoding = o_encoding ).
o_stream->set_pretty_print( pretty_print = abap_true ).
 
* Render-Objekt
DATA(o_render) = o_ixml->create_renderer( ostream  = o_stream
                                                                 document = o_document ).
 
* XML-String in Datei auf Applikationsserver generieren
DATA(lv_rc) = o_render->render( ).
 
* Dateigröße in Bytes
DATA(lv_size) = o_stream->get_num_written_raw( ).
   
* Stream schließen
o_stream->close( ).

Folgende Benutzer bedankten sich beim Autor jocoder für den Beitrag:
lisa


Re: Interne Tabelle als xml Datei auf einem Applikationsserver speichern

Beitrag von lisa (ForumUser / 53 / 8 / 1 ) »
jocoder hat geschrieben:
03.02.2021 12:59
Es gibt 2 Arten von XML-Bibliotheken:
1. SXML
2. IXML
Beide werden hier gemischt, was nicht notwendig ist.

Mit der SXML-Bibliothek und ohne Pretty-Print kann das Programm deutlich schlanker gestaltet werden:

Code: Alles auswählen.

DATA it_material_master_records TYPE STANDARD TABLE OF mara.
 
SELECT * FROM mara INTO TABLE it_material_master_records UP TO 10 ROWS.
 
DATA(o_writer_itab_xml) = cl_sxml_dataset_writer=>create( filename = '/tmp/test/test.xml' ).
CALL TRANSFORMATION id SOURCE values = it_material_master_records RESULT XML o_writer_itab_xml.

o_writer_itab_xml->close( ).
Mit der IXML sieht es dann wie folgt aus:

Code: Alles auswählen.

SELECT * FROM mara INTO TABLE it_material_master_records UP TO 10 ROWS.

DATA(o_ixml) = cl_ixml=>create( ).
 
DATA(o_document) = o_ixml->create_document( ).
CALL TRANSFORMATION id SOURCE values = it_material_master_records RESULT XML o_document.

DATA(o_sf) = o_ixml->create_stream_factory( ).
 
* Encoding UTF-8
DATA(o_encoding) = o_ixml->create_encoding( character_set = 'UTF-8'
                                              byte_order = if_ixml_encoding=>co_none ).
 
* Stream für Ausgabe in Datei '/tmp/test/test.xml' auf dem Applikationsserver
DATA(o_stream) = o_sf->create_ostream_uri( system_id = '/tmp/test/test.xml' ).
o_stream->set_encoding( encoding = o_encoding ).
o_stream->set_pretty_print( pretty_print = abap_true ).
 
* Render-Objekt
DATA(o_render) = o_ixml->create_renderer( ostream  = o_stream
                                                                 document = o_document ).
 
* XML-String in Datei auf Applikationsserver generieren
DATA(lv_rc) = o_render->render( ).
 
* Dateigröße in Bytes
DATA(lv_size) = o_stream->get_num_written_raw( ).
   
* Stream schließen
o_stream->close( ).

Hallo jocoder,

tausend Mal vielen Dank für deine Erklärung und deine Coding. Es hat funktioniert. Ich kam wirklich nicht weiter. Ich bin Dir und der Forum echt dankbar.

VG
lisa

Seite 1 von 1

Vergleichbare Themen

2
Antw.
2716
Views
PDF-Datei von Applikationsserver in interne Tabelle einlesen
von Geri » 15.04.2005 12:42 • Verfasst in ABAP® Core
0
Antw.
2391
Views
Interne Tabelle in Datei speichern
von Schludi » 08.06.2006 10:52 • Verfasst in Java & SAP®
13
Antw.
9667
Views
interne Tabelle als CSV-Datei auf Festplatte speichern.
von Bright4.5 » 09.10.2018 09:23 • Verfasst in ABAP® für Anfänger
31
Antw.
20517
Views
Interne Tabelle als Excel-Datei speichern
von Bright4.5 » 22.08.2018 13:50 • Verfasst in ABAP® für Anfänger
10
Antw.
2691
Views
Interne Tabelle als Excel Datei im Hintergrund speichern
von lisa » 23.03.2022 14:12 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 767
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2389
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8974