Code: Alles auswählen.
** Ausgabeobjekt erzeugen
lr_ostream_string = lr_streamfactory->create_ostream_cstring(
string = lf_xmlstring ).
** Ausgabeobjekte öffnen
lr_ostream_string->open( ).
** Datei nach Character-Set erzeugen und kanonisieren
lr_encoding = lr_ixml->create_encoding( character_set = 'UTF-8'
byte_order = 0 ).
lr_ostream_string->set_encoding( encoding = lr_encoding ).
lr_ostream_string->set_pretty_print( pretty_print = lf_pretty_print ).
** Erzeuge ein Rendererobjekt
lr_renderer_string = lr_ixml->create_renderer( document = lr_document
ostream = lr_ostream_string ).
** Rendern
lf_var_ret_string = lr_renderer_string->render( ).
lf_xmlparse = lf_xmlstring.
* Erzeuge XML-Stream
lr_istream = lr_streamfactory->create_istream_string( string =
lf_xmlparse ).
* Öffnen des Eingabestreams
lr_istream->open( ).
* Erzeuge XML-Parser
lr_parser = lr_ixml->create_parser( stream_factory = lr_streamfactory
istream = lr_istream
document = lr_document ).
* Parsen des Streams + Abbildung als DOM im XML-Document-Objekt
IF lr_parser->parse( ) NE 0.
Danke!a-dead-trousers hat geschrieben:Du verwendest einen CSTRING und renderst da UTF-8 hinein.
Das kann nicht funktionieren, weil der CSTRING in SAP UTF-16LE ist.
Intern wird hier der (binäre) UTF-8 String 1:1 in den UTF-16LE String umgewandelt. Da hier die Zeichen mal 2 und dann wieder 4 Bytes haben können, kommt in der Darstellung dann so ein Kauderwelsch heraus.
Verwende stattdessen entweder einen XSTRING für das Rendern und Parsen oder das richtige Encoding.
Code: Alles auswählen.
lr_encoding = lr_ixml->create_encoding( character_set = 'UTF-16'
byte_order = 0 ).
Code: Alles auswählen.
OPEN DATASET lf_outputfilename
FOR OUTPUT IN LEGACY BINARY MODE.
Klar, weil du die Datei als UTF-16 abgelegt hast und die AL11, soweit ich weis, versucht als UTF-8 oder ISO-8859-1 einzulesen.isp hat geschrieben:außerdem, den Inhalt der erzeugten Datei kann ich über AL11 nicht mehr ansehen... nur runterladen und dann ist der Inhalt ansehbar..
Normalerweise nimmt das OPEN DATASET auch Codepage-Konvertierungen vor. Dem kannst du entgegenwirken indem du die Konvertierung selber machst und die Daten als Binärstream rausschreibst. Außerdem kriegst du dann "aussagekräftige" Fehlermeldungen zurück und nicht einfach nur einen Abbruch mit SY-SUBRC.isp hat geschrieben:die Datei wird jetzt erzeugt, aber kein Inhalt drin.
dann habe ich den Zusatz LEGACY rausgenommen, die Datei wird erzeugt und Daten werden geschrieben, aber nicht vollständig und bricht an der Stelle auch ab.
Verstehe aber nicht warum, wird überhaupt eine Datei erstellt und warum bricht es ab.
Ist bei OPEN DATASET noch was zu beachten?
Code: Alles auswählen.
lr_convert = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ). "Oder welche Kodierung du halt haben möchtest
lr_convert->convert( exporting data = ld_string
importing buffer = ld_xstring ).
OPEN DATASET ld_file FOR OUTPUT IN BYTE MODE.
TRANSFER ld_xstring TO ld_file.
CLOSE DATASET ld_file.