-
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 zulassen. Der Ursachencode ist 5. Das
Unterfeld, für das der Fehler festgestellt wurde, ist "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 ')
d 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
-
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>
-
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
-
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.
-
Liebes Forum,
irgendetwas mache ich falsch..... nur sehe ich den Wald vor lauter Bäumen nicht.
Die Structur ist PGMRequest;OBJECTS;PART; innerhalb von PART kommt KEYS mit PROFILEKEY + FOREIGNKEY danach DATA mit hgna und weiteren Feldern von DATA
Die Felder von PGMRequest werden gefüllt,
KEYS wird gefüllt (Profilekey als auch Foreignkey)
DATA 1. Postition Teile-Nr wird gefüllt,
hgna - Fnt_nam1 = "Schraube" bekomme ich nicht ,
GROUPNAME ist gefüllt und die ersten 3 KEYCHARACTERISTIC(Name+Data) werden gefüllt, die nächsten 3 bleiben leer (der Counter bleibt auch Null)
die restlichen Felder von DATA bleiben auch leer.
PHP-Code:
ctl-opt Dftname(A04320R)
dftactgrp(*No)
Debug(*yes) Option(*NoExpDds: *NoDebugIo: *srcstmt: *NoUnRef)
Datfmt(*eur) TimFmt(*hms:) Datedit(*dmy);
dcl-f ArtStaL05 disk keyed usage(*Input: *update: *output);
//------------------------------------------------------------------/
// /
// Parsen XML-DATEN - CCSID DER XML-DATEI MUSS 1208 SEIN /
// /
//----------------- /
// R.Ross 12.2018 * 2018.12.05-1.6 NO /
//------------------------------------------------------------------/
// XML-Array - Root /
//------------------------------------------------------------------/
dcl-ds PDMRequest qualified;
TIMESTAMP char(30);
REQUESTID char(40);
MessageAffiliation char(40);
TriggerAction char(30);
ParentObjectType char(30);
ParentID char(30);
UserName char(20);
xmlns char(60);
OBJECTS Likeds(obj_t);
end-ds;
dcl-ds obj_t qualified template;
PART likeds(pa_t);
end-ds;
dcl-ds pa_t qualified template;
KEYS likeds(ke_t);
DATA likeds(Dta_T);
end-ds;
dcl-ds Ke_t qualified template;
PROFILEKEYS likeds(pfk_t);
FOREIGNKEYS likeds(fnk_t);
end-ds;
dcl-ds Dta_t qualified template;
Teile_Nr likeds(dt_t) ;
hgna likeds(hgna_t);
Ersteller likeds(dt_t) ;
Erstelldatum likeds(dt_t) ;
Workflow_Status likeds(dt_t) ;
Aenderungsdatum likeds(dt_t) ;
Aenderer likeds(dt_t) ;
meeh likeds(dt_t) ;
diart likeds(dt_t) ;
bez1 likeds(dt_t) ;
bez2 likeds(dt_t) ;
bez3 likeds(dt_t) ;
herna likeds(dt_t) ;
hernr likeds(dt_t) ;
cnnr likeds(dt_t) ;
ulfilenr likeds(dt_t) ;
csanr likeds(dt_t) ;
arstk_ likeds(dt_t) ;
arart_ likeds(dt_t) ;
herty likeds(dt_t) ;
csanorm likeds(dt_t) ;
Bemerkung likeds(dt_t) ;
Spezifikation likeds(dt_t) ;
end-ds;
//------------------------------------------------------------------//
// Template Data //
//------------------------------------------------------------------//
dcl-ds Dt_t template qualified;
FIELDNAME char(8);
data varchar(10);
end-ds;
//------------------------------------------------------------------//
// Element hgna //
//------------------------------------------------------------------//
dcl-ds hgna_t template qualified;
FIELDNAME varchar(30);
KEYGROUP likeds(Kg_t);
end-ds;
//------------------------------------------------------------------//
// Element Keygroup no template //
//------------------------------------------------------------------//
dcl-ds Kg_t template qualified;
GROUPNAME char(30);
Nu_Keycharacteristic uns(10);
KEYCHARACTERISTIC likeds(Kc_t) dim(6);
end-ds;
//------------------------------------------------------------------//
// Element Keycharacteristic //
//------------------------------------------------------------------//
dcl-ds Kc_t template qualified;
NAME char(10);
DATA varchar(15);
end-ds;
//------------------------------------------------------------------//
// Template Profilekeys //
//------------------------------------------------------------------//
dcl-ds Pfk_t template qualified;
Teile_Nr likeds(dt_t) ;
end-ds;
//------------------------------------------------------------------//
// Template Foreignkeys //
//------------------------------------------------------------------//
dcl-ds Fnk_t template qualified;
arart_ likeds(dt_t) ;
end-ds;
//------------------------------------------------------------------//
// Feldbeschreibungen //
//------------------------------------------------------------------//
dcl-s LocOpt varchar(256); // XML-Options
dcl-s LocFile varchar(128); // File
dcl-s attchpath char(80);
dcl-s FileName char(120);
dcl-s i packed(5:0);
dcl-s ii Like(i);
dcl-s x Like(i);
dcl-s nbrrec Like(i);
c *Entry Plist
c Parm attchpath
c Parm filename
//------------------------------------------------------------------//
// Processing //
//------------------------------------------------------------------//
filename='Part_w_SML_Export_PF_5_AS400.xml' ;
P4FILN=filename ;
chain P4FILN ArtstaL05;
Eval p4andat=%TimeStamp ;
LocFile = '/home/NOWAK/VORW/Part_w_SML_Export_PF_5_AS400.xml'; //FILE
LocOpt = 'doc=File case=convert allowextra=yes allowmissing=yes +
countprefix=Nu_ datasubf=data';
xml-into(E) PDMRequest %xml(LocFile:LocOpt);
nbrrec=1 ;
for i=1 to nbrrec ;
Write artstap ;
endfor;
*inlr = *on;
//------------------------------------------------------------------//
Dazu das mxl
PHP-Code:
<?xml version="1.0" encoding="utf-8"?>
<PDMRequest TIMESTAMP="2018-07-02T06:02:42.0900050Z" REQUESTID="ade0e849-4b36-4cd5-b849-56e5e52678fe" MessageAffiliation="6b94eae7-383b-475b-8c82-a2ce807437d6" TriggerAction="objectsend" ParentObjectType="" ParentID="" UserName="procad" xmlns="http://support.procad.de/schema/general/v2000-1000">
<OBJECTS>
<PART>
<KEYS>
<PROFILEKEYS>
<Teile-Nr. FIELDNAME="NFT_IDNR">20411</Teile-Nr.>
</PROFILEKEYS>
<FOREIGNKEYS>
<arart_ FIELDNAME="NFT_STL9">2002523</arart_>
</FOREIGNKEYS>
</KEYS>
<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>
und der Debug:
PHP-Code:
EVAL PDMRequest
PDMREQUEST.TIMESTAMP = '2018-07-02T06:02:42.0900050Z '
PDMREQUEST.REQUESTID = 'ade0e849-4b36-4cd5-b849-56e5e52678fe '
PDMREQUEST.MESSAGEAFFILIATION = '6b94eae7-383b-475b-8c82-a2ce807437d6 '
PDMREQUEST.TRIGGERACTION = 'objectsend '
PDMREQUEST.PARENTOBJECTTYPE = ' '
PDMREQUEST.PARENTID = ' '
PDMREQUEST.USERNAME = 'procat '
PDMREQUEST.XMLNS =
'http://support.procad.de/schema/general/v2000-1000 '
PDMREQUEST.OBJECTS.PART.KEYS.PROFILEKEYS.TEILE_NR.FIELDNAME = 'NFT_IDNR'
PDMREQUEST.OBJECTS.PART.KEYS.PROFILEKEYS.TEILE_NR.DATA = '20411 '
PDMREQUEST.OBJECTS.PART.KEYS.FOREIGNKEYS.ARART_.FIELDNAME = ' '
PDMREQUEST.OBJECTS.PART.KEYS.FOREIGNKEYS.ARART_.DATA = '2002523 '
PDMREQUEST.OBJECTS.PART.DATA.TEILE_NR.FIELDNAME = 'NFT_IDNR'
PDMREQUEST.OBJECTS.PART.DATA.TEILE_NR.DATA = '20411 '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.FIELDNAME =
'NFT_NAM1 '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.GROUPNAME =
'Blechschraube '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.NU_KEYCHARACTERISTIC = 1077952576
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(1) =
'ugna '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(1) =
'Blechschraube '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(2) =
'ugna_056 '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(2) =
'4,8 '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(3) =
'ugna_107 '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(3) =
' '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(4) =
' '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(4) =
' '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(5) =
' '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(5) =
' '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.NAME(6) =
' '
PDMREQUEST.OBJECTS.PART.DATA.HGNA.KEYGROUP.KEYCHARACTERISTIC.DATA(6) =
' '
PDMREQUEST.OBJECTS.PART.DATA.ERSTELLER.FIELDNAME = ' '
PDMREQUEST.OBJECTS.PART.DATA.ERSTELLER.DATA = ' '
PDMREQUEST.OBJECTS.PART.DATA.ERSTELLDATUM.FIELDNAME = ' '
PDMREQUEST.OBJECTS.PART.DATA.ERSTELLDATUM.DATA = ' '
PDMREQUEST.OBJECTS.PART.DATA.WORKFLOW_STATUS.FIELDNAME = ' '
PDMREQUEST.OBJECTS.PART.DATA.WORKFLOW_STATUS.DATA = ' '
PDMREQUEST.OBJECTS.PART.DATA.AENDERUNGSDATUM.FIELDNAME = ' '
PDMREQUEST.OBJECTS.PART.DATA.AENDERUNGSDATUM.DATA = ' '
PDMREQUEST.OBJECTS.PART.DATA.AENDERER.FIELDNAME = ' '
PDMREQUEST.OBJECTS.PART.DATA.AENDERER.DATA = ' '
vielleicht findet einer von Euch den Fehler.
LG
Hans-Joachim
-
Von der Theorie siehts erst mal sauber aus.
Gibt es Fehlermeldungen im Joblog?
Da die XML ja UTF8 sein soll, prüfe mal das CCSID-Attribut der Quelle. Ggf. must du da mal ein CHGATR machen und die CCSID 1208 für UTF8 setzen.
Felder in deiner DS können u.U. auch zu kurz sein. Es kann da nicht schaden, diese
a) länger zu machen
b) mit varying zu definieren
-
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
-
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
-
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;
//------------------------------------------------------------------//
-
ich glaube ich habe ihn gefunden... sch….. ab data(3) wird das Feld nicht richtig geschlossen
Werde ich heute Abend ausprobieren.
-
Da kann man mal wieder sehen, wofür das Joblog so gut ist;-).
-
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-Variablen; Ursachencode 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
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks