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.
Bookmarks