[NEWSboard IBMi Forum]

Thema: XML Parsen

  1. #1
    Registriert seit
    Jul 2008
    Beiträge
    76

    Question XML Parsen

    Hallo,

    Das Einlesen von Einzelfeldern funktioniert problemlos (options = 'path=.....')
    ich versuche eine komplettes XML file einzulesen, komme aber nicht über den compile hinaus, da dieser Fehler bringt, wie auch immer ich ORDERS und HEAD definiere. Habe hier schon alles mögliche probiert.

    9 d ORDERS ds qualified inz
    ======> aaaaaa
    *RNF3530 00 a 000900 Datenstruktur ORDERS hat keine gültigen Unterfelder.
    10 d HEAD ds qualified inz
    ======> aaaa
    *RNF3530 00 a 001000 Datenstruktur HEAD hat keine gültigen Unterfelder.

    Wie muss ich die beiden Felder definieren?
    Beispiel:
    . ?xml version="1.0" encoding="UTF-8"?>
    . ORDERS>
    . HEAD>
    . VersionNumber>
    . VersionName>XML.EANCOM.MBO
    . VersionNo>8.1
    . /VersionNumber>
    . /HEAD>
    . /ORDERS>


    d Filename s 100a inz
    d Options s 200a inz
    d
    d ORDERS ds qualified inz
    d HEAD ds qualified inz
    d VersionNumber ds qualified
    d VersionName 14a
    d VersionNo 3a
    c*
    /free
    options = 'doc=file case=any allowmissing=yes allowextra=yes ' +
    'countprefix=cnt_ datasubf=data ';
    Filename = '/XMLOrderIN/20181031_221735_1TJW5S_2.xml';
    xml-into ORDERS %xml(%Trim(Filename)ptions);

    dsply ORDERS;
    *

    Return;
    *Inlr = *On;

  2. #2
    Registriert seit
    Jul 2008
    Beiträge
    76




  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Du hast eine verschachtelte Datenstruktur!
    Die zweite Datenstruktur muss mit LIKEDS in die erste eingebunden werden (zumindest in Fix-Format D-Bestimmungen).
    Code:
    D RefDSVersNo     DS                  Qualified           Inz  Template     
    D   VersionName                 14A                                         
    D   VersionNo                    3A                                         
                                                                                
    D RefDSHead       DS                  Qualified           Inz  Template     
    D  VersionNumber                      LikeDS(RefDSVersNo)                   
                                                                                
    D Orders          DS                  Qualified           Inz               
    D   Head                              LikeDS(RefDSHead)
    In Free-Format D-Bestimmungen kannst Du die Datenstrukturen verschachteln.

    Code:
      DCL-DS Orders                       Qualified           Inz;              
         DCL-DS Head;                                                           
           DCL-DS VersionNumber;                                                
             VersionName     Char(14);                                          
             VersonNo        Char(3);                                           
           End-Ds;                                                              
         End-Ds;                                                                
      End-Ds;
    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

  4. #4
    Registriert seit
    Jul 2008
    Beiträge
    76
    Hallo Birgitta,

    Vielen Dank für den Hinweis.
    Das habe ich jetzt gemacht, bekomme aber wieder die Fehlermeldung beim compile.

    dVersionNumber_t ds qualified inz template
    d VersionName 14a
    d VersionNo 3a

    dhead_t ds qualified inz template
    d VersionNumber ds likeDS(VersionNumber_t)

    dORDERS ds qualified inz
    d HEAD ds LikeDS(head_t)

    Gruß Franco



    ======> aaaaaa
    *RNF3530 00 a 001400 Datenstruktur HEAD_T hat keine gültigen Unterfelder.

    ======> aaaaaa
    *RNF3530 00 a 001700 Datenstruktur ORDERS hat keine gültigen Unterfelder.

  5. #5
    Registriert seit
    Mar 2009
    Beiträge
    53
    wahrscheinlich wegen dem 'ds' bei VersionNumber und HEAD

  6. #6
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Wenn VersionNumber ein subfield/ds von head_t sein soll, dann musst du das DS in der zweiten D-Zeile weg lassen.
    Also:
    d VersionNumber likeDS(VersionNumber_t)

  7. #7
    Registriert seit
    Jul 2008
    Beiträge
    76
    Hallo Andreas, das wars. @Brigitta: Hätte ich doch nur Dein Code genauer gelesen :-(

Berechtigungen

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