Ich bin da demnächst mal auf dem Kundensystem und zeige davon dann mein Beispiel.
So (Auszüge):

Code:
d* Datum-Referenz                                           
dC_C507           ds                  qualified template    
d D_2380                        20    varying               

dS_DTM            ds                  qualified template    
d C_C507                              likeds(C_C507)        

d* Preise                                                     
dC_C509           ds                  qualified template      
d D_5125                        10    varying                 
d D_5118                        15    varying                 
d D_5375                        10    varying                 
d D_5378                        10    varying                 
d D_5284                        10    varying                 
d D_6411                        10    varying                 

dS_PRI            ds                  qualified template    
d C_C509                              likeds(C_C509)        

dG_LIN_PRI        ds                  qualified template     
d S_PRI                               likeds(S_PRI)          
d S_DTM                               likeds(S_DTM) dim(2)   
d cntS_DTM                      10i 0                        

dG_LIN            ds                  qualified template            
d S_LIN                               likeds(S_LIN)                 
d S_IMD                               likeds(S_IMD)     dim(2)      
D G_LIN_PRI                           likeds(G_LIN_PRI) dim(2)      

d* Gesamtdokument                                              
dXMLFACT_ORDERS   ds                  qualified                
d S_IMD                               likeds(S_IMD)            
d G_LIN                               likeds(G_LIN) dim(999)   
d cntG_LIN                      10i 0                          

d G_LINi          s              5i 0   

dXMLName          s            256    varying inz    
dXMLOption        s            256    varying inz    

// Festlegen der XML-Optionen                                                      
XMLOption = ' trim=all'                 // Leerzeichen am Anfang/Ende              
          + ' allowmissing=yes'         // fehlende Knoten ignorieren              
          + ' allowextra=yes'           // zusätzliche Knoten ignorieren           
          + ' countprefix=cnt'          // Zählervariable für Arrays               
          + ' case=convert'             // ungültige Zeichen in "_" konvertieren   
          + ' doc=file'                 // XML aus Datei lesen                     
          ;                                                                        

XMLName = XMLPath + %trim(XMLOName); // Kompletter Pfadname         
XML-INTO XMLFACT_ORDERS %xml(XMLName : XMLOption); 

for G_LINi = 1 to XMLFACT_ORDERS.cntG_LIN;                     
    if XMLFACT_ORDERS.G_LIN(G_LINi)                            
       .S_LIN.C_C212.D_7140 <> *blank;   // mit Sachnummer     
:
: 
   endif;
endfor;
Analog musst du also ebenso deine XML-Struktur rekursiv aufbauen und mittels geschachteltem likeds() zusammenbauen.
Aus Sicherheitsgründen definiere ich alles als Zeichenfelder um dann Zahl-/Datumswerte per individueller Konvertierung %date(), %dec() zu erhalten.