[gelöst] XML-Problem...

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

[gelöst] XML-Problem...

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Hallo zusammen!!

Ich habe ein XML-Problem, bei dem ich nicht weiter komme... :-/

Ich habe einen XML-Stream, den ich in meine Datenstruktur konvertieren möchten.
Wenn ich den XML-Datenstrom, den ich habe, transformiere, erhalte ich nix.
Wenn ich aber meine Struktur mit Daten fülle, diese in einen XML-Datenstrom umwandele, dann sieht dieser XML-Datenstrom genauso aus, wie der "Originaldatenstrom". Wenn ich diesen dann transformiere, wird die Struktur auch gefüllt. :evil:

Ich verstehe nicht, wo da mein Denkfehler ist...

Hier mal mein Testprogramm:

Code: Alles auswählen.

TYPES:

  BEGIN OF ty_partner,
    title               TYPE string,
    name                TYPE string,
    phone               TYPE string,
  END OF ty_partner,


  BEGIN OF ty_partner_result,
    anzahl             TYPE i,
    partner            TYPE STANDARD TABLE OF ty_partner WITH DEFAULT KEY,
  END OF ty_partner_result,

  BEGIN OF ty_result,
    result             TYPE ty_partner_result,
  END OF ty_result.


DATA ls_xml            TYPE string.
DATA ls_partner        TYPE ty_partner.
DATA ls_output         TYPE ty_result.
DATA ls_xstring        TYPE xstring.

PARAMETERS p DEFAULT 1.

START-OF-SELECTION.

  CONCATENATE  '<?xml version="1.0" encoding="iso-8859-1"?>#<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">'
               '<asx:values>'
               '<PartnerResult><Result><Anzahl>2</Anzahl><Partner>'
               '<item><title>Dr.</title><name>Meyer</name><phone>0049 172 12345678</phone></item>'
               '<item><title></title><name>Mueller</name><phone>0049 172 55544433</phone></item>'
               '</Partner></Result></PartnerResult>'
               '</asx:values>'
               '</asx:abap>'
          INTO ls_xml.

  CASE p.
    WHEN 'D'.
      CALL FUNCTION 'CRM_IC_XML_STRING2XSTRING'
        EXPORTING
          instring   = ls_xml
        IMPORTING
          outxstring = ls_xstring.


      CALL FUNCTION 'BIZC_UI_XML_DISPLAY'
        EXPORTING
          ip_xml = ls_xstring.

    WHEN '1'.
*** Daten => XML
      ls_output-result-anzahl = 2.
      ls_partner-title = 'Dr.'.
      ls_partner-name  = 'Meyer'.
      ls_partner-phone = '0049 030 12345678'.
      APPEND ls_partner TO ls_output-result-partner.
      ls_partner-title = ''.
      ls_partner-name  = 'Moeller'.
      ls_partner-phone = '0049 040 22334455'.
      APPEND ls_partner TO ls_output-result-partner.

      CALL TRANSFORMATION id SOURCE Partnerresult = ls_output RESULT XML ls_xml.

      CALL FUNCTION 'CRM_IC_XML_STRING2XSTRING'
        EXPORTING
          instring   = ls_xml
        IMPORTING
          outxstring = ls_xstring.


      CALL FUNCTION 'BIZC_UI_XML_DISPLAY'
        EXPORTING
          ip_xml = ls_xstring.

      CLEAR ls_output.
      CALL TRANSFORMATION id SOURCE XML ls_xml
*                   RESULT result = ls_output.
             RESULT partnerresult = ls_output.

      IF ls_output-result-anzahl > 0.
        BREAK-POINT.
      ELSE.
        MESSAGE s000(oo) WITH 'WAR NIX...'.
      ENDIF.

    WHEN '2'.

*** XML => Struktur
      CALL TRANSFORMATION id SOURCE XML ls_xml
             RESULT partnerresult = ls_output.

      IF ls_output-result-anzahl > 0.
        BREAK-POINT.
      ELSE.
        MESSAGE s000(oo) WITH 'WAR NIX...'.
      ENDIF.
  ENDCASE.
Mit Programmparameter "D" wird der Originaldatenstrom angezeigt.
Mit "1" wird die interne Struktur gefüllt und ebenfalls ein XML-Datenstrom erzeugt.
Wenn man beide vergleicht, sehen sie gleich aus.

Trotzdem bekomme ich mit Programmparameter "2" die Umwandlung des Originaldatenstroms in meine Struktur nicht hin. :mrgreen:

Hilfe.

Danke für eure Anregungen...!

Gruß
Enno
Zuletzt geändert von ewx am 09.03.2009 14:28, insgesamt 1-mal geändert.

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


Re: XML-Problem...

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
Hallo Enno,

Bist Du sicher, dass Dein per Hand erzeugter "XML-Stream" mit dem '#' im Header valides XML ist?
Oder hast Du da nur ein nicht druckbares Zeichen per Cut&Paste aus dem Debugger oder einer ABAP-Liste übernommen?

Ansonsten einfach mal SY-FDPOS auswerten, nachdem Du den von Dir zusammengebauten und den von CALL TRANSFORMATION ID erzeugten Stream per IF-Anweisung vergleichst.
Allerdings müsstest Du dann noch Zeilenumbrüche und Tabulatoren (?) einfügen.
CALL TRANSFORMATION sollte zwar auch ohne funktionieren.
Aber erst mal suchst Du ja die Unterschiede, die Du manuell übersehen hast, wie z.B. die abweichenden Telefonnummern ;)

Warum baust Du den XML-Stream überhaupt per Hand zusammen?

Frank

Re: XML-Problem...

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Hi Frank!

Die # ist mir tatsächlich noch nicht aufgefallen. Da der Stream aber korrekt angezeigt wird...
Probiere ich aber mal aus!
Die abweichenden Telefonnummern sind ja nur Daten. :wink:
Den Stream baue ich nur per Hand zusammen, um testen zu können. "In echt" bekomme ich den Stream natürlich aus einem anderen Funktionsbaustein.

Ich probiere deine Hinweise Montag mal aus!
Danke!

Re: XML-Problem...

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Also ich bin immer noch nicht schlauer...
Ich habe nun nochmal "meinen" XML-Stream mit dem verglichen, der aus CALL TRANSFORMATION herauskommt und die beiden sind gleich. Trotzdem kann ich die per CALL TRANSFORMATION in XML konvertierte Struktur wieder zurückverwandeln, "meinen" Stream jedoch nicht... :mrgreen:

In der Hoffnung, dass noch jemand eine Idee hat...

PS: Die # war ein 0A (Line feed)...

[Gelöst] XML-Problem...

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
...also... die beiden Streams waren doch nicht gleich...
Der vom System erzeugte Stream bestand nur aus GROßBUCHSTABEN während meine Tags nur einen großen Anfangsbuchstaben hatten... :x

Re: [Gelöst] XML-Problem...

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
ewx hat geschrieben:...also... die beiden Streams waren doch nicht gleich...
Der vom System erzeugte Stream bestand nur aus GROßBUCHSTABEN während meine Tags nur einen großen Anfangsbuchstaben hatten... :x
Dass die Tags nicht in Großbuchstaben waren, war eigentlich das erste, was mir auffiel.
Du hast aber so überzeugend behauptet, dass Du die XML-Streams verglichen und keine Unterschiede festgestellt hast, dass ich dachte, DEN Unterschied kannst Du ja wohl nicht übersehen haben, also wird es wohl nicht daran liegen. Und seit meiner letzten Benutzung von CALL TRANSFORMATION id unter 6.20 hat sich ja vielleicht auch etwas getan, und zu 7.0 werden die Tags konvertiert (obwohl man da noch streiten könnte, ob das nun ein Bug oder ein Feature wäre).
Deswegen ja auch meine Frage, warum Du den Stream selbst "manuell" zusammenbaust.
Wenn man die Kontrolle darüber hat und die den XML-Stream erzeugende Stelle ein SAP-System ist, würde ich da immer ABAP-Strukturen definieren und füllen und den XML-Stream mit CALL TRANSFORMATION id erzeugen (es sei denn, der Stream wird sehr groß).

Wenn Du keinen Einfluss auf den angelieferten XML-Stream hast, muss eben eine eigene XSLT-Transformation statt id genutzt werden, in der dann z.B. die Tags in Großbuchstaben konvertiert (und auf 30 Zeichen gekürzt) werden.
Such doch mal in allen auf das Muster '++++++++++++++++++++++++++++++XT' passenden "ABAP"-Quelltexte (so viele gibt es davon ja nicht) nach 'translate'.

Wenn ABAP-Strukturen oder -Feldnamen ein '/' enthalten (wg. Namensprefix), wird '/' beim Erzeugen eines XML-Streams mit CALL TRANSFORMATION id auch ersetzt (durch '_-' oder '-_', wenn ich mich richtig erinnere. Genau solche Tags werden dann auch für Zielfelder mit '/' erwartet... War irgendwo auch dokumentiert, kann mich aber nicht mehr erinnern, wo.

Re: [Gelöst] XML-Problem...

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Frank Dittrich hat geschrieben:Dass die Tags nicht in Großbuchstaben waren, war eigentlich das erste, was mir auffiel.
Du hast aber so überzeugend behauptet, dass Du die XML-Streams verglichen und keine Unterschiede festgestellt hast, dass ich dachte, DEN Unterschied kannst Du ja wohl nicht übersehen haben, also wird es wohl nicht daran liegen.
Das war für mich völlig undenkbar, dass hier die Groß-Kleinschreibung relevant wäre... 8)
Frank Dittrich hat geschrieben:Wenn Du keinen Einfluss auf den angelieferten XML-Stream hast, muss eben eine eigene XSLT-Transformation statt id genutzt werden, in der dann z.B. die Tags in Großbuchstaben konvertiert (und auf 30 Zeichen gekürzt) werden.
Das ist ja schon wieder eine Wissenschaft für sich...
Allerdings werde ich mich da wohl drum kümmern müssen, denn interne Tabellen werden im XML codiert mit <TABNAME> und die einzelnen Zeilen mit <ITEM>.
Wenn allerdings der Stream der Meinung ist, er müsste mit <TABNAME><TABZEILE> kommen...
Obwohl: Da ich keinen XML-Doktor-Titel habe und auch erstmal nicht mehr brauche, werde ich wahrscheinlich einfach im Stream <TABZEILE> durch <ITEM> ersetzen... :-D

Re: [Gelöst] XML-Problem...

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
ewx hat geschrieben:Allerdings werde ich mich da wohl drum kümmern müssen, denn interne Tabellen werden im XML codiert mit <TABNAME> und die einzelnen Zeilen mit <ITEM>.
Wenn allerdings der Stream der Meinung ist, er müsste mit <TABNAME><TABZEILE> kommen...
Lass mich raten: TABZEILE ist ein DDIC-Typ.
Dass das bei Dir nicht klappt, liegt daran, dass bei Dir die itab-Zeile nicht mit Bezug auf einen DDIC-Typen definiert wurde.
Sonst wäre der DDIC-Typ des Zeilentypen übernommen worden.
Geht sowohl für DDIC-Strukturen (<BSEG> ... </BSEG>) als auch für Datenelemente (<TEXT300> ... </TEXT300>).

Frank

Re: [gelöst] XML-Problem...

Beitrag von ewx (Top Expert / 4849 / 313 / 642 ) »
Richtig geraten... :!:
Leider kriege ich ja keine Struktur und auch kein Datenelement angelegt, dass TABZEILE heisst... :cry:

Seite 1 von 1

Vergleichbare Themen

5
Antw.
4509
Views
[gelöst] SAPScript PERFORM Problem
von codierknecht » 05.10.2006 09:31 • Verfasst in ABAP® für Anfänger
2
Antw.
360
Views
[GELÖST]REUSE_ALV_GRID_DISPLAY Zeilenselektion
von msfox » 20.09.2022 15:37 • Verfasst in ABAP® Core
0
Antw.
2237
Views
2
Antw.
972
Views
[GELÖST] Funktionsbaustein READ_TEXT
von SAP_ENTWICKLER » 24.05.2019 17:42 • Verfasst in ABAP® Core
8
Antw.
2875
Views
Wie kann ich APPENDieren? (gelöst)
von SeZo » 07.11.2011 11:55 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Regex in where
vor 23 Stunden von tar 8 / 369
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1636
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 286
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 529

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

Regex in where
vor 23 Stunden von tar 8 / 369
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1636
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 286
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 529

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 2 Tagen von snooga87 1 / 221
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3403
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9953