XML laden - zwei Wege, nur einer klappt, warum?

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

XML laden - zwei Wege, nur einer klappt, warum?

Beitrag von justMe (ForumUser / 12 / 0 / 0 ) »
Hallo,

leider sind meine Kentnisse über XML nicht ausreichend um mir diese Frage zu beantworten. Dabei will ich die Datei nur laden. Die Verarbeitung klappt, nur das laden macht Probleme.

Ich lade eine XML-Datei in SAP, einmal so:

Code: Alles auswählen.

    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        filename                = lv_filename
        filetype                = 'BIN'
        has_field_separator     = ' '
        header_length           = 0
        read_by_line            = 'X'
        dat_mode                = ' '
und alternativ so:

Code: Alles auswählen.

   OPEN DATASET lv_filename FOR INPUT IN BINARY MODE.
    IF sy-subrc = 0.
      DO.
        READ DATASET lv_filename INTO ls_xml_line.
        IF sy-subrc EQ 0.
          APPEND ls_xml_line TO xml_table.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
    ENDIF.
das erste funktioniert immer!

Der Erfolg der zweite Version scheint von der definition xml_table abhängig zu sein?!

Code: Alles auswählen.

TYPES: BEGIN OF xml_line,
        data(256) TYPE x,
      END OF xml_line.
DATA: xml_table      TYPE TABLE OF xml_line,
      ls_xml_line    LIKE LINE  OF xml_table.
Nach dem Laden ist immer eine Zeile weniger in der Table als bei Version eins.
Ändere ich die Definition aber wie folgt ab, klappt es:

Code: Alles auswählen.

TYPES: BEGIN OF xml_line,
        data(1) TYPE x,
      END OF xml_line.
Hat irgend jemand eine Idee, was ich machen muss, dass es klappt, ohne die krücke mit der Zeilenlänge 1???

Danke im Voraus!

Grüße,
Markus

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


Beitrag von Krueger ( / / 0 / 3 ) »
Erstmal zur Klarstellung:

Upload und Transfer greifen auf verschiedene Daten zu?!?!?

Falls ja, sind die Dateien auch 100%ig identisch?


Andere Frage, WELCHE ZEILE FEHLT... irgendeine??? die erste ... oder die letzte....????

Schon mal statt:

Code: Alles auswählen.

TYPES: BEGIN OF xml_line, 
        data(1) TYPE x, 
      END OF xml_line.
versucht:

Code: Alles auswählen.

TYPES: BEGIN OF xml_line, 
        data(255) TYPE x, 
      END OF xml_line.
Also statt "1" oder "256" ...

Beitrag von justMe (ForumUser / 12 / 0 / 0 ) »
Hallo,

die Datei ist identisch, ich habe die Datei auf ein Transferverzeichnis stehen, von der sowohl der Upload, als auch der Transfer drauf zugreifen kann. Es handelt sich also um ein und die selbe Datei!

Es fehlt nach dem Ladevorgang eine Zeile und zwar die letzte. Aber es ist nicht vergleichbar mit einer Zeile einer Textdatei, es fehlt eine Zeile in der Tabelle in der die Datei geladen wird (Binary Mode).
Bei der Definition mit 255 Zeichen fehlen bis zu 255 Zeichen, bei Definition mit 1 fehlt bis zu einem Zeichen. Bei meiner Datei scheine ich glück zu haben, und bei Definition mit Zeilenlänge eins passt es scheinbar, bei 10 fehlt schon was (das End-Tag der XML-Datei, oder ein bischen mehr).

Was ist da los???
Wie ladet Ihr XML-Dateien???

Danke und Grüße,
Markus

PS: bin nächste Woche nicht da, also nicht wundern, wenn ich erst später antworte.

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
meines wissens muss beim GUI-UPLOAD die Länge der Datei in BYTE angegeben werden. Da gibts nen Befehl dazu das herauszubekommen.

So wie du es bis jetzt geschrieben hast, dürfte auch bei der ersten Vers. eine differenz zwischen orginal und geladene Datei sein.

Bei der 2ten Version musste mit XSTRING arbeiten nicht mit X.
Praktisch gesehen ist aber die erste Variante die bessere ;)

Gruß
Markus

Re: XML laden - zwei Wege, nur einer klappt, warum?

Beitrag von mgerling (ForumUser / 4 / 0 / 0 ) »
justMe hat geschrieben: und alternativ so:

Code: Alles auswählen.

   OPEN DATASET lv_filename FOR INPUT IN BINARY MODE.
    IF sy-subrc = 0.
      DO.
        READ DATASET lv_filename INTO ls_xml_line.
        IF sy-subrc EQ 0.
          APPEND ls_xml_line TO xml_table.
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
    ENDIF.
das erste funktioniert immer!
Hi das Problem ist Deine Sy-SubRC Abfrage. Wenn READ DATASET die letzte Zeile aus Deine Dokument liest ist das FileEnde erreicht und der Sy-SubRC <> 0. ABER in ls_xml_line steht trotzedem die letzte Zeile. Du APPENDest sie aber nicht, deshalb fehlt sie Dir in der xml_table.

Code: Alles auswählen.

   
OPEN DATASET lv_filename FOR INPUT IN BINARY MODE.
lv_subrc = sy-subrc.
WHILE lv_subrc = 0.
  READ DATASET lv_filename INTO ls_xml_line.
  lv_subrc = sy-subrc.
  CHECK  NOT ls_xml_line IS INITIAL
  APPEND ls_xml_line TO xml_table.
  CLAER  ls_xml_line.
ENDWHILE.
CLOSE DATASET lv_filename.
Gruß
Meinolf

Beitrag von justMe (ForumUser / 12 / 0 / 0 ) »
oh Gott bin ich blöd....! ja, das wars!
Das hätt ich eigentlich selber rausfinden müssen, wozu gibts denn den Debugger... Dafür entschuldige ich mich, aber da war ich wohl blind.

Danke nochmals!

Seite 1 von 1

Vergleichbare Themen

1
Antw.
1006
Views
Verschiedene Wege Dokumente anzuhängen (GOS)
von deejey » 23.02.2021 13:09 • Verfasst in SAP - Allgemeines
4
Antw.
5654
Views
Mail Senden klappt nicht
von SaskuAc » 09.01.2018 15:23 • Verfasst in ABAP® Core
1
Antw.
1724
Views
Wertzuweisung zur Variable klappt nicht.
von kaim77 » 23.02.2015 08:49 • Verfasst in ABAP Objects®
0
Antw.
1210
Views
Sy-repid klappt nicht für Funktionsbaustein
von Witchcraft » 04.07.2008 14:01 • Verfasst in ABAP® Core
5
Antw.
2715
Views
SUBMIT (Programname) aus RFC FuBa klappt nicht
von mawi » 16.05.2008 14:12 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 792
Dialog-Container mit Toolbar/Status
vor 15 Stunden von black_adept gelöst 21 / 2619

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.

Aktuelle Forenbeiträge

Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 2 / 792
Dialog-Container mit Toolbar/Status
vor 15 Stunden von black_adept gelöst 21 / 2619

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2403
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 8987