[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.102

    XML-String per SQL interpretieren

    Hallo,
    die SQL-Möglichkeiten sind ja mit dem Release 7.3 erheblich erweitert worden. Deshalb dachte ich, es dürfte doch gar kein Problem sein, mit Hilfe von SQL einen XML-String zu interpretieren. Aber die Beispiele, die ich gefunden habe, sind alle sehr komplex. Geht das nicht irgendwie einfacher?

    Wenn ich eine einfache XML-Struktur habe, also z.B.:
    HTML-Code:
    <zahlung>
        <betrag>120.55</betrag>
        <datum>15.05.2017</datum>
    <zahlung>
    Kann ich mir die Werte für betrag und datum nicht einfach mit einem SQL "select ... into" (oder wegen mir mit 2 getrennten SQL-Statements) auslesen? Ich würde der SQL-Funktion den String dann gerne als Host-Variable übergeben.

    In den Beispielen sieht es immer so aus, als müsste der XML-String in einer Tabelle stehen und man müsste irgendwelche Headerinfos in der XML-Tabelle haben usw.

    Ich weiß, dass ich das Problem auch mit RPG mittels xml-into lösen könnte. Das will ich hier aber nicht. Meine Frage geht in Richtung SQL.

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Das musst Du schon mit der XMLTABLE Table-Funktion lösen.
    Wo befindet sich denn Dein XML-Dokument?
    Variable, XML-Spalte, IFS? Je nachdem musst Du beim passing unterschiedlich aufsetzten.
    Sofern alle Informationen auf der gleichen Ebene sind, und Du mit dem xml-Namen zufrieden bist, könnte das SELECT-Statement etwa so aussehen.

    Code:
    SELECT * 
       From XMLTABLE('/zahlung/'
                 Passing XMLDOKUMENT
                 Columns "betrag"  Dec(11, 2),
                            "datum" Date) x
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Der XMLTABLE erwartet ein fertiges XML-Dokument, XMLPARSE liefert ein XML-Dokument.
    XMLPARSE wiederum kann eine XML-Zeichenkette interpretieren.
    Grob müsste also

    select * from XMLTABLE(XMLPARSE('XML native Daten' ...) ...)

    funktionieren.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Vielen Dank für eure Antworten. Ich denke, wir sind da auf dem richtigen Weg. Aber ganz klappt es noch nicht. Ich habe mal folgende Varianten probiert: (Sorry, dass die so schlecht formatiert sind, aber seltsamerweise fehlt in meinem Browser-Editor das "Code Einfügen" Symbol).

    SELECT *
    From XMLTABLE('/zahlung/'
    Passing xmlparse('123.4515.05.2016')
    Columns "betrag" Dec(11, 2),
    "datum" Date) x
    ;


    SELECT *
    From XMLTABLE('/zahlung' passing xmlparse('123.4515.05.2016')
    Columns "betrag" Dec(11, 2),
    "datum" Date) x
    ;


    Ich werde versuchen, mich da weiter zu hangeln.

  5. #5
    Registriert seit
    May 2002
    Beiträge
    1.121
    Zitat Zitat von dschroeder Beitrag anzeigen
    (Sorry, dass die so schlecht formatiert sind, aber seltsamerweise fehlt in meinem Browser-Editor das "Code Einfügen" Symbol).
    Beim Antworten einfach auf ERWEITERT gehen, und schon steht es wieder zur Verfügung

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Was soll "123.4515.05.2016" denn sein?
    Das ist mit Sicherheit kein XML-String.
    An dieser Stelle sollte dein obiger XML-Code stehen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Was soll "123.4515.05.2016" denn sein?
    Das ist mit Sicherheit kein XML-String.
    An dieser Stelle sollte dein obiger XML-Code stehen.
    Sorry, da hat der Browser Editor beim Speichern mal wieder die spitzen Klammern weggenommen.
    Ich versuche mal, den XML-String hier so so posten, dass er auch dargestellt wird:
    HTML-Code:
    SELECT *    From XMLTABLE('/zahlung/'             Passing xmlparse('<zahlung><betrag>123.45</betrag><datum>15.05.2016</datum></zahlung>')             Columns "betrag"  Dec(11, 2),                        "datum" Date) x;                        
    SELECT *    From XMLTABLE('/zahlung' passing xmlparse('<zahlung><betrag>123.45</betrag><datum>15.05.2016</datum></zahlung>')             Columns "betrag"  Dec(11, 2),                        "datum" Date) x;

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    SELECT * From XMLTABLE('/zahlung' passing
    xmlparse(document
    'Dein XML-String' strip whitespace)
    Columns "betrag" char(20),
    "datum" char(10)) x

    So funktionierts schon mal vom Grundsatz. Die Feldtypen kannst du ja dann entsprechend ausprobieren da einiges von der Umgebung abhängt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Zitat Zitat von Fuerchau Beitrag anzeigen
    SELECT * From XMLTABLE('/zahlung' passing
    xmlparse(document
    'Dein XML-String' strip whitespace)
    Columns "betrag" char(20),
    "datum" char(10)) x

    So funktionierts schon mal vom Grundsatz. Die Feldtypen kannst du ja dann entsprechend ausprobieren da einiges von der Umgebung abhängt.
    Klapp in der Tat!
    Sehr gut.
    Herzlichen Dank!

Similar Threads

  1. altes rpg, in einem string was tauschen
    By dibe in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 19-09-14, 08:11
  2. suchen im string mit sql
    By ILEMax in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 11-01-14, 10:32
  3. mit SQL sortieren nach String
    By heynem in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 07-11-07, 12:53
  4. String ausschneiden
    By heynem in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 20-03-03, 10:15
  5. Programmname aus String ermitteln
    By LaLeLi in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 19-06-02, 09:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •