[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Thema: XML-Parser

  1. #1
    Registriert seit
    Jul 2002
    Beiträge
    218

    XML-Parser

    Hallo Forum,

    ich mache gerade meine ersten "geh versuche" mit XML.
    Über die ersten Fehler (CCSID) bin ich schon gestolpert, habe das aber schon übers Forum gelöst bekommen.

    Zugrunde liegt ein XML-Dokument mit mehreren Elementen.
    PHP-Code:
    <?xml version="1.0" encoding="utf-8"?>                                             
      <DATA>                                                                           
       <Teile_Nr  FIELDNAME="NFT_IDNR">20411</Teile_Nr>                                
           <hgna FIELDNAME="NFT_NAM1">Schraube                                         
           <KEYGROUP GROUPNAME="Blechschraube">                                        
            <KEYCHARACTERISTIC NAME="ugna">Blechschraube</KEYCHARACTERISTIC>           
            <KEYCHARACTERISTIC NAME="ugna_056">4,8</KEYCHARACTERISTIC>                 
            <KEYCHARACTERISTIC NAME="ugna_107">38<KEYCHARACTERISTIC>                   
            <KEYCHARACTERISTIC NAME="ugna_401">DIN EN ISO 7049<KEYCHARACTERISTIC>      
            <KEYCHARACTERISTIC NAME="ugna_208">C<KEYCHARACTERISTIC>                    
            <KEYCHARACTERISTIC NAME="ugna_150">verzinkt<KEYCHARACTERISTIC>             
         </KEYGROUP>                                                                   
         </hgna>                                                                       
       <Ersteller FIELDNAME="NFT_KON">BizTalkImport</Ersteller>                        
       <Erstelldatum FIELDNAME="NFT_DAT">2018-05-24T16:07:12</Erstelldatum>            
       <Workflow-Status FIELDNAME="NFT_ZUST">20000</Workflow-Status>                   
       <Aenderungsdatum FIELDNAME="NFT_MDAT">0001-01-01T01:00:00</Aenderungsdatum> 
       <Aenderer FIELDNAME="NFT_MKON"></Aenderer>                   
       <meeh FIELDNAME="NFT_STK2">01</meeh>                         
       <diart FIELDNAME="NFT_STK3">K</diart>                        
       <bez1 FIELDNAME="NFT_STL0">Blechschraube</bez1>             
       <bez2 FIELDNAME="NFT_STL1">Linsen mit Kreuzschlitz</bez2>   
       <bez3 FIELDNAME="NFT_STL2"></bez3>                          
       <herna FIELDNAME="NFT_STL3"></herna>                        
       <hernr FIELDNAME="NFT_STL4"></hernr>                        
       <cnnr FIELDNAME="NFT_STL5"></cnnr>                          
       <ulfilenr FIELDNAME="NFT_STL6"></ulfilenr>                  
       <csanr FIELDNAME="NFT_STL7"></csanr>                        
       <arstk_ FIELDNAME="NFT_STL8">DIN EN ISO 7049</arstk_>       
       <arart_ FIELDNAME="NFT_STL9">2002523</arart_>               
       <herty FIELDNAME="NFT_STH0"></herty>                        
       <csanorm FIELDNAME="NFT_STH1"></csanorm>                    
       <Bemerkung FIELDNAME="ML_STRING"></Bemerkung>               
       <Spezifikation FIELDNAME="ML_STRING"></Spezifikation> 
      </DATA> 
    </PART></OBJECTS></PDMRequest>

    Zuerst habe ich das XML Dokument zerlegt, also nur DATA mit den einzelnen Feldbeschreibungen
    -DATA-
    …. Felder ….
    -/DATA.

    hat auch funktioniert.
    Anschliessend habe ich hgna eingefügt,
    doch jetzt bin ich mit meinem XML-Wissen am Ende und habe auch keine Idee wie ich das beim
    RPG darstellen soll.
    PHP-Code:
     Nachricht . . . :   Das XML-Dokument entspricht nicht der RPG-Variablen;      
       
    Ursachencode 5.                                                             
     Ursache  
    . . . . : Beim Parsing eines XML-Dokuments hat der Parser            
       festgestellt
    dass das XML-Dokument nicht der RPG-Variablen "PARM"          
       
    entspricht und die Optionen dies nicht zulassenDer Ursachencode ist 5. Das
       Unterfeld
    für das der Fehler festgestellt wurdeist "PARM(1).hgna.value"
       Die 
    Optionen sind "doc=File datasubf=value path=DATA      allowmissing=yes  
       allowextra=yes case=convert"
    Der Name des XML-Dokuments ist 
    Programm:
    PHP-Code:
    d*-------------                                    
    d tmplteilenr     ds                  qualified    
    d                                           template     
    d  FIELDNAME                    15a                
    d  value                            30a                
                                                       
                                                       
    d tmplkeychar     ds                  template     
    d                                              qualified    
    d Name                            15a    
    d value                            30a                                 
    d
    *-------------                                                     
    d tmplkeygroup    ds                  template                      
    d                                              qualified                     
    d  GROUPNAME                    15a                                 
    d  value                               30a                                 
    d KEYCHARACTERIS
    ...                                                 
    D TIC                                 Dim(6)  likeds(tmplkeychar)   
                                                                        
    d*-------------                                                     
    d tmplhgnaField   ds                  qualified                     
    d                                             template                      
    d  FIELDNAME                    15a                                 
    d  value                             30a                                 
                                                                        
    d
    *-------------                                                     
    d tmplhgna        ds                  qualified                     
    d                                           template                      
    d  FIELDNAME                    15a    
    d  value                        30a                                     
    d  GROUPNAME                    15a                                     
    d  value1                       30a                                     
    d  keygroup                           Likeds
    (tmplkeygroup)              
                                                                             
    d*-------------                                                         
    d tmplersteller   ds                  qualified                         
    d                                           template                          
    d  FIELDNAME                    15a                                     
    d  value                             30a                                     
                                                                             
    d
    *-------------                                                         
    d tmplerstelldat  ds                  qualified                         
    d                                           template                          
    d  FIELDNAME                    15a                                     
    d  value                             30a                                     
    d
    *-------------                                       
    d tmplWorkflowSt  ds                  qualified       
    d                                     template        
    d  FIELDNAME                    15a                   
    d  value                        30a                   
                                                          
    d
    *-------------                                       
    d tmplAenderungD  ds                  qualified       
    d                                     template        
    d  FIELDNAME                    15a                   
    d  value                        30a                   
                                                          
    d
    *-------------                                       
    d tmplAenderer    ds                  qualified       
    d                                     template        
    d  FIELDNAME                    15a                   
    d  value                        30a                   
                                                          
    d
    *-------------
    d tmplWorkflowSt  ds                  qualified     
    d                                     template      
    d  FIELDNAME                    15a                 
    d  value                        30a                 
                                                        
    d
    *-------------                                     
    d tmplAenderungD  ds                  qualified     
    d                                     template      
    d  FIELDNAME                    15a                 
    d  value                        30a                 
                                                        
    d
    *-------------                                     
    d tmplAenderer    ds                  qualified     
    d                                     template      
    d  FIELDNAME                    15a                 
    d  value                        30a                 
                                                        
    d
    *-------------                                     
    d tmplmeeh        ds                  qualified     
    d                                     template      
    d  FIELDNAME                    15a                 
    d  value                         2a                 
                                                        
    d
    *-------------                                     
    d tmpldiart       ds                  qualified     
    d                                     template      
    d  FIELDNAME                    15a                 
    d  value                         1a                 
                                                        
    d
    *-------------                                     
    d tmplbez1        ds                  qualified     
    d                                     template      
    d  FIELDNAME                    15a                 
    d  value                        30a                 
                                                        
    d
    *-------------                                      
    d tmplbez2        ds                  qualified      
    d                                     template       
    d  FIELDNAME                    15a                  
    d  value                        30a                  
                                                         
    d
    *-------------                                      
    d tmplbez3        ds                  qualified      
    d                                     template       
    d  FIELDNAME                    15a                  
    d  value                        30a                  
                                                         
    d
    *-------------                                      
    d tmplherna       ds                  qualified      
    d                                     template       
    d  FIELDNAME                    15a                  
    d  value                        30a                  
                                                         
    d
    *-------------
    d tmplhernr       ds                  qualified   
    d                                     template    
    d  FIELDNAME                    15a               
    d  value                        30a               
                                                      
    d
    *-------------                                   
    d tmplcnnr        ds                  qualified   
    d                                     template    
    d  FIELDNAME                    15a               
    d  value                        30a               
                                                      
    d
    *-------------                                   
    d tmplufilenr     ds                  qualified   
    d                                     template    
    d  FIELDNAME                    15a               
    d  value                        30a               
                                                      
    d
    *-------------                                   
     
    d tmplcsanr       ds                  qualified 
    d                                     template  
    d  FIELDNAME                    15a             
    d  value                        30a             
                                                    
    d
    *-------------                                 
    d tmplarstk_      ds                  qualified 
    d                                     template  
    d  FIELDNAME                    15a             
    d  value                        30a             
                                                    
    d
    *-------------                                 
    d tmplarart_      ds                  qualified 
    d                                     template  
    d  FIELDNAME                    15a             
    d  value                        30a             
                                                    
    d
    *-------------                                 
    d tmplherty       ds                  qualified   
    d                                     template    
    d  FIELDNAME                    15a               
    d  value                        30a               
                                                      
    d
    *-------------                                   
    d tmplcsanorm     ds                  qualified   
    d                                     template    
    d  FIELDNAME                    15a               
    d  value                        30a               
                                                      
    d
    *-------------                                   
    d tmplBemerkung   ds                  qualified   
    d                                     template    
    d  FIELDNAME                    15a               
    d  value                        30a               
                                                      
    d
    *-------------
    d tmplSpezifikat  ds                  qualified       
    d                                     template        
    d  FIELDNAME                    15a                   
    d  value                        30a                   
                                                          
    d
    *=============                                                                                                     d tmpldata        ds                  qualified               
    d                                     template                
    d  Teile_Nr                           likeds
    (tmplteilenr)     
    d  hgna                               likeds(tmplhgna)        
    d  Ersteller                          likeds(tmplersteller)   
    d  Erstelldatum                       likeds(tmplerstelldat)  
    d  Workflow_Stat...                                           
    d  us                                 likeds(tmplWorkflowSt)  
    d  Aenderungsdat...                                           
    d  um                                 likeds(tmplAenderungD)  
    d  Aenderer                           likeds(tmplAenderer)    
    d  meeh                               likeds(tmplmeeh)        
    d  diart                              likeds(tmpldiart)       
    d  bez1                               likeds(tmplbez1)        
    d  bez2                               likeds(tmplbez2)        
    d  bez3                               likeds(tmplbez3)        
    d  herna                              likeds(tmplherna)       
    d  hernr                              likeds(tmplhernr)       
    d  cnnr                               likeds(tmplcnnr)
    d  ulfilenr                           likeds(tmplufilenr)                  
    d  csanr                              likeds(tmplcsanr)                    
    d  arstk_                             likeds(tmplarstk_)                   
    d  arart_                             likeds(tmplarart_)                   
    d  herty                              likeds(tmplherty)                    
    d  csanorm                            likeds(tmplcsanorm)                  
    d  Bemerkung                          likeds(tmplbemerkung)                
    d  Spezifikation                      likeds(tmplspezifikat)               
                                                                               
    d xmlpfad         s            255a   varying                              
        
    d doc             s            100a   varying                              
    d                                     inz
    ('doc=File datasubf=value ')      
    d allowmissing    s             20a   varying                              
    d                                     inz
    ('allowmissing=yes ')             
    d allowextra      s             20a   varying                              
    d                                     inz
    ('allowextra=yes ')               
    case            s             20a   varying         
    d                                     inz
    ('case=convert')    
                                                                 
    d path            s            255a   varying                
    d                                     inz
    ('path=DATA      '
                                                                 
    d status          s               n    
     
         
    Eval  xmlpfad=%Trim(attchpath)+%Trim(FileName)  ;  
                                                           
                                                           
      
    xml-into  %handler(Xmldomhandler status)           
                    %
    xml(xmlpfad :                         
                                 
    doc +                     
                                 
    path +                    
                                 
    allowmissing +            
                                 
    allowextra +              
                                 case);                    
                                                           
     eval *
    inlr=*On ;                                      
     
    p Xmldomhandler   b                                         
                                                                
    d                 pi            10i 0                       
    d redcode                         n                         
    d DATA                                likeds
    (tmpldata)      
    d                                     dim(1)                
    d                                     const                 
    d nbrrec                        10i 0 value                 
    d x               s             10i 0 inz 
    im Debug sieht es dann so aus:

    PHP-Code:
    EVAL DATA                                                          
    DATA
    .TEILE_NR.FIELDNAME(1) = '**********     '                     
    DATA.TEILE_NR.VALUE(1) = '**********                    '          
    DATA.HGNA.FIELDNAME(1) = '**********     '                         
    DATA.HGNA.VALUE(1) = '**********                    '              
    DATA.HGNA.GROUPNAME(1) = '**********     '                         
    DATA.HGNA.VALUE1(1) = '**********                    '             
    DATA.HGNA.KEYGROUP.GROUPNAME(1) = '**********     '                
    DATA.HGNA.KEYGROUP.VALUE(1) = '**********                    '     
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(1,1) = '**********     ' 
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.VALUE(1,1) =                  
             
    '**********                    '                          
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(1,2) = '**********     ' 
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.VALUE(1,2) = 
    Vielleicht kann mir hier einer auf die Sprünge helfen.

    Vielen Dank
    Hans-Joachim

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich weis jetzt nicht ob das nur ein Copy-Paste Fehler ist, aber deine Abschluss-Tags stimmen schon mal nicht:

    HTML-Code:
    <KEYCHARACTERISTIC NAME="ugna_107">38<KEYCHARACTERISTIC>
    statt

    HTML-Code:
    <KEYCHARACTERISTIC NAME="ugna_107">38</KEYCHARACTERISTIC>
    Des weiteren hast du noch 3 weitere Ende-Tags (nach dem ) wo ich keinen Anfang finden konnte:
    HTML-Code:
    </DATA> 
    </PART></OBJECTS></PDMRequest>

  3. #3
    Registriert seit
    Aug 2014
    Beiträge
    179
    Ich habe bei meinen Parsings immer case=any definiert, damit spielt Groß- und Kleinschreibung keine Rolle.
    countprefix=cnt_ ist auch eine gute Idee, dann weißt Du wieviel Elemente dein Array hat

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Desweiteren würde ich lange Namen vollständig ausschreiben und dann erst "..." verwenden.

    Nun betrachte deine Struktur mal genau:

    Für jede Ebene benötigst du eine DS, die die untergeordneten Strukturen mit likeds(SubStruktur) einbettet, so dass du anschließend ein Element genauso ansprichst wie im PHP-Code.
    In jeder DS müssen die Namen identisch zum Knoten und Attribut passen, wobei RPG unbekannte Zeichen bei "case=Convert" in "_" den Rest automatisch in Großbuchstaben umwandelt.

    Deine vielen Template-DS'n sind hier vollkommen irrelevant.

    Ich würde auch erst mal den XML-INTO ohne %Handler verwenden, da dieser das gesammte XML in die DS einliest.
    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

  5. #5
    Registriert seit
    Jul 2002
    Beiträge
    218
    Vielen dank für die Antworten.

    @andreasPr
    a) / beim abtippen vergessen
    b stehen am anfang (ebenfalls vergessen)
    **** Demenz light ***

    @Rainer Ross
    werde ich berücksichtigen.

    @Fuerchau
    werde ich mal umstellen.


    Danke Euch für Eure Tipps.
    Hans-Joachim

  6. #6
    Registriert seit
    Aug 2014
    Beiträge
    179
    Hallo Hans-Joachim,

    ich habe etwas rumprobiert und eine Lösung gefunden, die funktioniert. Bei den Optionen habe ich noch countprefix=cnt_ datasubf=data eingefügt.

    Die Debug-Daten
    PHP-Code:
    DATA.TEILE_NR.FIELDNAME 'NFT_IDNR  '                                    
    DATA.TEILE_NR.DATA '20411               '                              
    DATA.HGNA.KEYGROUP.GROUPNAME 'Blechschraube                           '
    DATA.HGNA.KEYGROUP.CNT_KEYCHARACTERISTIC 6                              
    DATA
    .HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(1) = 'ugna      '              
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(1) = 'Blechschraube       '    
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(2) = 'ugna_056  '              
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(2) = '4,8                 '    
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(3) = 'ugna_107  '              
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(3) = '38                  '    
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(4) = 'ugna_401  '              
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(4) = 'DIN EN ISO 7049     '    
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(5) = 'ugna_208  '
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(5) = 'C                   '  
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(6) = 'ugna_150  '            
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(6) = 'verzinkt            '  
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(7) = '          '            
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(7) = '                    '  
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(8) = '          '            
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(8) = '                    '  
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(9) = '          '            
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(9) = '                    '  
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(10) = '          '            
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(10) = '                    '  
    DATA.ERSTELLER.FIELDNAME 'NFT_KON   '                                
    DATA.ERSTELLER.DATA 'BizTalkImport       '                            
    DATA.ERSTELLDATUM.FIELDNAME 'NFT_DAT   '
    DATA.ERSTELLDATUM.DATA '2018-05-24T16:07:12 '            
    DATA.WORKFLOW_STATUS.FIELDNAME 'NFT_ZUST  '              
    DATA.WORKFLOW_STATUS.DATA '20000               '          
    DATA.AENDERUNGSDATUM.FIELDNAME 'NFT_MDAT  '              
    DATA.AENDERUNGSDATUM.DATA '0001-01-01T01:00:00 ' 
    Die korrigierte und modifizierte XML-Datei, statt Workflow-Status -> Workflow_Status
    HTML-Code:
     <?xml version="1.0" encoding="utf-8"?>                                             
    <DATA>                                                                           
        <Teile_Nr  FIELDNAME="NFT_IDNR">20411</Teile_Nr>                                
        <hgna FIELDNAME="NFT_NAM1">Schraube                                         
            <KEYGROUP GROUPNAME="Blechschraube">                                        
                <KEYCHARACTERISTIC NAME="ugna">Blechschraube</KEYCHARACTERISTIC>           
                <KEYCHARACTERISTIC NAME="ugna_056">4,8</KEYCHARACTERISTIC>                 
                <KEYCHARACTERISTIC NAME="ugna_107">38</KEYCHARACTERISTIC>                   
                <KEYCHARACTERISTIC NAME="ugna_401">DIN EN ISO 7049</KEYCHARACTERISTIC>      
                <KEYCHARACTERISTIC NAME="ugna_208">C</KEYCHARACTERISTIC>                    
                <KEYCHARACTERISTIC NAME="ugna_150">verzinkt</KEYCHARACTERISTIC>             
            </KEYGROUP>                                                                   
        </hgna>                                                                       
        <Ersteller FIELDNAME="NFT_KON">BizTalkImport</Ersteller>                        
        <Erstelldatum FIELDNAME="NFT_DAT">2018-05-24T16:07:12</Erstelldatum>            
        <Workflow_Status FIELDNAME="NFT_ZUST">20000</Workflow_Status>                   
        <Aenderungsdatum FIELDNAME="NFT_MDAT">0001-01-01T01:00:00</Aenderungsdatum> 
        <Aenderer FIELDNAME="NFT_MKON"></Aenderer>                   
        <meeh FIELDNAME="NFT_STK2">01</meeh>                         
        <diart FIELDNAME="NFT_STK3">K</diart>                        
        <bez1 FIELDNAME="NFT_STL0">Blechschraube</bez1>             
        <bez2 FIELDNAME="NFT_STL1">Linsen mit Kreuzschlitz</bez2>   
        <bez3 FIELDNAME="NFT_STL2"></bez3>                          
        <herna FIELDNAME="NFT_STL3"></herna>                        
        <hernr FIELDNAME="NFT_STL4"></hernr>                        
        <cnnr FIELDNAME="NFT_STL5"></cnnr>                          
        <ulfilenr FIELDNAME="NFT_STL6"></ulfilenr>                  
        <csanr FIELDNAME="NFT_STL7"></csanr>                        
        <arstk_ FIELDNAME="NFT_STL8">DIN EN ISO 7049</arstk_>       
        <arart_ FIELDNAME="NFT_STL9">2002523</arart_>               
        <herty FIELDNAME="NFT_STH0"></herty>                        
        <csanorm FIELDNAME="NFT_STH1"></csanorm>                    
        <Bemerkung FIELDNAME="ML_STRING"></Bemerkung>               
        <Spezifikation FIELDNAME="ML_STRING"></Spezifikation>
    </DATA>
    Das RPG-Programm
    PHP-Code:
             ctl-opt dftactgrp(*no);
          
    //------------------------------------------------------------------//
          //                                                                  //
          //  Parsen XML-DATEN - CCSID DER XML-DATEI MUSS 1208 SEIN           //
          //                                                                  //
          //-----------------                                                 //
          // R.Ross 12.2018 *                                                 //
          //------------------------------------------------------------------//
          // XML-Array - Root                                                 //
          //------------------------------------------------------------------//

             
    dcl-ds  Data                  qualified;
              
    dcl-ds  Teile_Nr;
                       
    Fieldname           char(10);
                       
    Data                char(20);
              
    end-ds;
                      
    hgna                 likeds(hgna);
              
    dcl-ds  Ersteller;
                       
    Fieldname           char(10);
                       
    Data                char(20);
              
    end-ds;
              
    dcl-ds  Erstelldatum;
                       
    Fieldname           char(10);
                       
    Data                char(20);
              
    end-ds;
              
    dcl-ds  Workflow_Status;
                       
    Fieldname           char(10);
                       
    Data                char(20);
              
    end-ds;
              
    dcl-ds  Aenderungsdatum;
                       
    Fieldname           char(10);
                       
    Data                char(20);
              
    end-ds;
             
    end-ds;

          
    //------------------------------------------------------------------//
          // Element hgna                                                     //
          //------------------------------------------------------------------//

             
    dcl-ds  hgna                  qualified;
                      
    Keygroup             likeds(Keygroup);
             
    end-ds;

          
    //------------------------------------------------------------------//
          // Element Keygroup                                                 //
          //------------------------------------------------------------------//

             
    dcl-ds  Keygroup              qualified;
                      
    Groupname            char(40);
                      
    cnt_Keycharacteristic uns(10);
                      
    Keycharacteristic    likeds(Keycharacteristic)dim(10);
             
    end-ds;

          
    //------------------------------------------------------------------//
          // Element Keycharacteristic                                        //
          //------------------------------------------------------------------//

             
    dcl-ds  Keycharacteristic     qualified;
                      
    Name                 char(10);
                      
    Data                 char(20);
             
    end-ds;

          
    //------------------------------------------------------------------//
          // Processing                                                       //
          //------------------------------------------------------------------//

               
    main();

               *
    inlr = *on;
          
    //------------------------------------------------------------------//
          // Main                                                             //
          //------------------------------------------------------------------//
             
    dcl-proc Main;

             
    dcl-s   LocOpt      varchar(256);            // XML-Options
             
    dcl-s   LocFile     varchar(128);            // File

               
    LocFile '/Home/Import/xml/test01.xml';   // File

               
    LocOpt  'doc=file case=any allowextra=yes +
                          countprefix=cnt_ datasubf=data'
    ;

               
    xml-into Data %xml(LocFile:LocOpt);

             
    end-proc;
          
    //------------------------------------------------------------------// 
    Herzliche Grüße
    Rainer

  7. #7
    Registriert seit
    Aug 2014
    Beiträge
    179
    Das RPG-Programm läßt sich noch weiter vereinfachen
    Code:
             ctl-opt dftactgrp(*no);                                                                                        
          //------------------------------------------------------------------//                                            
          //                                                                  //                                            
          //  Parsen XML-DATEN - CCSID DER XML-DATEI MUSS 1208 SEIN           //                                            
          //                                                                  //                                            
          //-----------------                                                 //                                            
          // R.Ross 12.2018 *                                                 //                                            
          //------------------------------------------------------------------//                                            
          // XML-Array - Root                                                 //                                            
          //------------------------------------------------------------------//                                            
                                                                                                                            
             dcl-ds  Data                  qualified;                                                                       
                      Teile_Nr             likeds(Data_tmp);                                                                
                      hgna                 likeds(hgna);                                                                    
                      Ersteller            likeds(Data_tmp);                                                                
                      Erstelldatum         likeds(Data_tmp);                                                                
                      Workflow_Status      likeds(Data_tmp);                                                                
                      Aenderungsdatum      likeds(Data_tmp);                                                                
             end-ds;                                                                                                        
                                                                                                                            
          //------------------------------------------------------------------//                                            
          // Template Data                                                    //                                            
          //------------------------------------------------------------------//                                            
                                                                                                                            
             dcl-ds  Data_tmp              template qualified;                                                              
                      Fieldname            char(10);                                                                        
                      Data                 char(20);                                                                        
             end-ds;                                                                                                        
                                                                                                                            
          //------------------------------------------------------------------//                                            
          // Element hgna                                                     //                                            
          //------------------------------------------------------------------//                                            
                                                                                                                            
             dcl-ds  hgna                  qualified;                                                                       
                      Keygroup             likeds(Keygroup);                                                                
             end-ds;                                                                                                        
                                                                                                                            
          //------------------------------------------------------------------//                                            
          // Element Keygroup                                                 //                                            
          //------------------------------------------------------------------//                                            
                                                                                                                            
             dcl-ds  Keygroup              qualified;                                                                       
                      Groupname            char(40);                                                                        
                      cnt_Keycharacteristic uns(10);                                                                        
                      Keycharacteristic    likeds(Keycharacteristic)dim(10);                                                
             end-ds;                                                                                                        
                                                                                                                            
          //------------------------------------------------------------------//                                            
          // Element Keycharacteristic                                        //                                            
          //------------------------------------------------------------------//                                            
                                                                                                                            
             dcl-ds  Keycharacteristic     qualified;                                                                       
                      Name                 char(10);                                                                        
                      Data                 char(20);                                                                        
             end-ds;                                                                                                        
                                                                                                                            
          //------------------------------------------------------------------//                                            
          // Processing                                                       //                                            
          //------------------------------------------------------------------//                                            
                                                                                                                            
               main();                                                                                                      
                                                                                                                            
               *inlr = *on;                                                                                                 
          //------------------------------------------------------------------//                                            
          // Main                                                             //                                            
          //------------------------------------------------------------------//                                            
             dcl-proc Main;                                                                                                 
                                                                                                                            
             dcl-s   LocOpt      varchar(256);            // XML-Options                                                    
             dcl-s   LocFile     varchar(128);            // File                                                           
                                                                                                                            
               LocFile = '/Home/Import/xml/test01.xml';   // File                                                           
                                                                                                                            
               LocOpt  = 'doc=file case=any allowextra=yes +                                                                
                          countprefix=cnt_ datasubf=data';                                                                  
                                                                                                                            
               xml-into Data %xml(LocFile:LocOpt);                                                                          
                                                                                                                            
             end-proc;                                                                                                      
          //------------------------------------------------------------------//

  8. #8
    Registriert seit
    Jul 2002
    Beiträge
    218
    Hallo Rainer,

    vielen Dank für Deine Mühe.

    Ich habe Dein Programm etwas erweitert (Felder hinzugefügt)

    Dann kommt dann die Meldung:
    PHP-Code:
    Das XML-Dokument entspricht nicht der RPG-VariablenUrsachencode 4.  
     4. Das XML
    -Dokument enthält keine XML-Attribute oder -Elemente, die  
         
    Unterfeldern entsprechen.  

    Debug:
    EVAL 
    Data                                                                 
    DATA
    .TEILE_NR.FIELDNAME 'NFT_IDNR  '                                    
    DATA.TEILE_NR.DATA '20411               '                               
    DATA.HGNA.KEYGROUP.GROUPNAME 'Blechschraube                           ' 
    DATA.HGNA.KEYGROUP.CNT_KEYCHARACTERISTIC 7                              
    DATA
    .HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(1) = 'ugna      '               
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(1) = 'Blechschraube       '     
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(2) = 'ugna_056  '               
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(2) = '4,8                 '     
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(3) = 'ugna_107  '               
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(3) = '38                  '     
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(4) = 'ugna_401  '               
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(4) = 'DIN EN ISO 7049     '     
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(5) = 'ugna_208  '
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(5) = 'C                   ' 
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(6) = 'ugna_150  '           
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(6) = 'verzinkt            ' 
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(7) = 'ugna_999  '           
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(7) = 'BlauGrau            ' 
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(8) = '          '           
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(8) = '                    ' 
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(9) = '          '           
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(9) = '                    ' 
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(10) = '          '          
    DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(10) = '                    '
    DATA.ERSTELLER.FIELDNAME 'NFT_KON   '                               
    DATA.ERSTELLER.DATA 'BizTalkImport       '                          
    DATA.ERSTELLDATUM.FIELDNAME 'NFT_DAT   '
    DATA.ERSTELLDATUM.DATA '2018-05-24T16:07:12 '         
    DATA.WORKFLOW_STATUS.FIELDNAME '          '           
    DATA.WORKFLOW_STATUS.DATA '                    '      
    DATA.AENDERUNGSDATUM.FIELDNAME 'NFT_MDAT  '           
    DATA.AENDERUNGSDATUM.DATA '0001-01-01T01:00:00 '      
    DATA.AENDERER.FIELDNAME 'NFT_MKON  '                  
    DATA.AENDERER.DATA '                    '             
    DATA.MEEH.FIELDNAME 'NFT_STK2  '                      
    DATA.MEEH.DATA '01                  '                 
    DATA.DIART.FIELDNAME 'NFT_STK3  '                     
    DATA.DIART.DATA 'K                   '                
    DATA.BEZ1.FIELDNAME 'NFT_STL0  '                      
    DATA.BEZ1.DATA 'Blechschraube       '                 
    DATA.BEZ2.FIELDNAME 'NFT_STL1  '
    DATA.BEZ2.DATA 'Linsen mit Kreuzschl'          
    DATA.BEZ3.FIELDNAME 'NFT_STL2  '               
    DATA.BEZ3.DATA '                    '          
    DATA.HERNA.FIELDNAME 'NFT_STL3  '              
    DATA.HERNA.DATA '                    '         
    DATA.HERNR.FIELDNAME 'NFT_STL4  '              
    DATA.HERNR.DATA '                    '         
    DATA.CNNR.FIELDNAME 'NFT_STL5  '               
    DATA.CNNR.DATA '                    '          
    DATA.ULFILENR.FIELDNAME 'NFT_STL6  '           
    DATA.ULFILENR.DATA '                    '      
    DATA.CSANR.FIELDNAME 'NFT_STL7  '              
    DATA.CSANR.DATA '                    '         
    DATA.ARSTK_.FIELDNAME 'NFT_STL8  '
    DATA.ARSTK_.DATA 'DIN EN ISO 7049     '        
    DATA.ARART_.FIELDNAME 'NFT_STL9  '             
    DATA.ARART_.DATA '2002523             '        
    DATA.HERTY.FIELDNAME 'NFT_STH0  '              
    DATA.HERTY.DATA '                    '         
    DATA.CSANORM.FIELDNAME 'NFT_STH1  '            
    DATA.CSANORM.DATA '                    '       
    DATA.BEMERKUNG.FIELDNAME 'ML_STRING '          
    DATA.BEMERKUNG.DATA '                    '     
    DATA.SPEZIFIKATION.FIELDNAME 'ML_STRING '      
    DATA.SPEZIFIKATION.DATA '                    ' 
    jetzt frage ich mich wieso diese Fehlermeldung kommt.

    Dann habe ich noch eine Frage, wenn jetzt in einem Zeile kommt:
    PHP-Code:
    <Artikel-Nr.  FIELDNAME=NFT_ART_NUM">80030045</Artikel-Nr.> 

    wie definiere ich das Feld im Rpg?



    Hans-Joachim

  9. #9
    Registriert seit
    Aug 2014
    Beiträge
    179
    Poste bitte das Programm, dann kann ich es nachvollziehen

  10. #10
    Registriert seit
    Aug 2014
    Beiträge
    179
    Dann habe ich noch eine Frage, wenn jetzt in einem Zeile kommt:
    PHP-Code:
    <Artikel-Nr. FIELDNAME="NFT_ART_NUM">80030045
    Die Empfehlung für gutes XML ist Bindestrich und Punkt zu vermeiden

    XML Naming Rules

    XML elements must follow these naming rules:

    • Element names are case-sensitive
    • Element names must start with a letter or underscore
    • Element names cannot start with the letters xml (or XML, or Xml, etc)
    • Element names can contain letters, digits, hyphens, underscores, and periods
    • Element names cannot contain spaces

    Any name can be used, no words are reserved (except xml).


    Best Naming Practices

    HTML-Code:
    Create descriptive names, like this:  <person>, <firstname>, <lastname>.
     Create short and simple names, like this: <book_title> not like this:  <the_title_of_the_book>.
     Avoid "-". If you name something "first-name", some software may  think you want to subtract "name" from "first".
     Avoid ".". If you name something "first.name", some software may  think that "name" is a property of the object "first".
     Avoid ":". Colons are reserved for   namespaces (more later).
     Non-English letters like éòá are perfectly legal in XML, but watch out for  problems if your software doesn't support them.
    

    Quelle: https://www.w3schools.com/xml/xml_elements.asp



  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Insofern schon besser, sich daran zu halten. Für Sprachen wie Java/.Net/o.ä. ist das letztlich aber egal.
    Für ILERPG werden ungültige Namen ja sowieso (case=convert) in "_" übersetzt.
    Die XML-Schreibweise für Namen ist i.d.R. "CamelCase", also den Höckern des Kamels nachempfunden.
    Großbuchstaben am Anfang eines Wortes, der Rest dann klein, z.b. "ArtikelNummer".
    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

  12. #12
    Registriert seit
    Jul 2002
    Beiträge
    218
    @fuerchau

    Leider wird mir die XML-Datei von der Java- o.ä. -Fraktion zur Verfügung gestellt.

Berechtigungen

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