PDA

View Full Version : XML Parsen



fdh
20-11-19, 08:34
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:
<orders><versionnumber><orders><versionnumber>. ?xml version="1.0" encoding="UTF-8"?>
. ORDERS>
. HEAD>
. VersionNumber>
. VersionName>XML.EANCOM.MBO
. VersionNo>8.1
. /VersionNumber>
. /HEAD>
. /ORDERS>
</versionnumber></orders></versionnumber></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):options);

dsply ORDERS;
*

Return;
*Inlr = *On;

fdh
20-11-19, 08:37
<orders><versionnumber>
</versionnumber>

</orders>

B.Hauser
20-11-19, 09:19
Du hast eine verschachtelte Datenstruktur!
Die zweite Datenstruktur muss mit LIKEDS in die erste eingebunden werden (zumindest in Fix-Format D-Bestimmungen).

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.


DCL-DS Orders Qualified Inz;
DCL-DS Head;
DCL-DS VersionNumber;
VersionName Char(14);
VersonNo Char(3);
End-Ds;
End-Ds;
End-Ds;

Birgitta

fdh
20-11-19, 10:17
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.

max40
20-11-19, 12:00
wahrscheinlich wegen dem 'ds' bei VersionNumber und HEAD

andreaspr@aon.at
20-11-19, 13:17
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)

fdh
20-11-19, 13:43
Hallo Andreas, das wars. @Brigitta: Hätte ich doch nur Dein Code genauer gelesen :-(