-
XML Parsen / Behandeln der Feldinhalte der mehrfach vorkommenden Elemente
Hallo,
ich lese das XML nun ein.
Allerdings habe ich das Problem, die mehrfach vorkommenden Artikelnummern anzusprechen,
bzw. mir diese Felder in meine Dateifelder zu befördern. Als Tabellenfelder will das der Compiler nicht. Wie ist die Syntax?
EVAL orders
ORDERS.HEAD.ORDERNUMBER = '1TJW5S 2 '
ORDERS.HEAD.VERSIONNUMBER.VERSIONNAME = 'XML.EANCOM.MBO'
ORDERS.HEAD.VERSIONNUMBER.VERSIONNO = '8.1 '
ORDERS.HEAD.LINE.LINEITEMNUMBER(1) = '1 '
ORDERS.HEAD.LINE.PRODUCTNUMBER(1) = 'E1527875LG'
ORDERS.HEAD.LINE.LINEITEMNUMBER(2) = '2 '
ORDERS.HEAD.LINE.PRODUCTNUMBER(2) = 'N1527875RL'
ORDERS.HEAD.LINE.LINEITEMNUMBER(3) = ' '
ORDERS.HEAD.LINE.PRODUCTNUMBER(3) = ' '
ORDERS.HEAD.LINE.LINEITEMNUMBER(4) = ' '
ORDERS.HEAD.LINE.PRODUCTNUMBER(4) = ' '
ORDERS.HEAD.LINE.LINEITEMNUMBER(5) = ' '
ORDERS.HEAD.LINE.PRODUCTNUMBER(5) = ' '
//eval f41 = ORDERS.HEAD.LINE.LINEITEMNUMBER.Cnt_Line;
//eval f42 = ORDERS.HEAD.LINE.LINEITEMNUMBER.Cnt_Line;
//eval f41 = ORDERS.HEAD.LINE.LINEITEMNUMBER(Cnt_Line);
//eval f42 = ORDERS.HEAD.LINE.LINEITEMNUMBER(2 );
//eval f42 = ORDERS.HEAD.LINE.LINEITEMNUMBER(002.);
dLine_t ds template
d LineItemNumber...
d 3a
d ProductNumber...
d 10a
dhead_t ds qualified inz
d OrderNumber 10a
d VersionNumber likeDS(VersionNumber_t)
d Line likeDS(Line_t) Dim(05)
d Cnt_Line 3 0
Dankeschön.
Gruß
Franco
-
Der Debugger löst das etwas anders auf.
Für den Compiler ist der ArrayIndex dann anzugeben, wenn man ein DIM(nn) defineirt hat.
head_t. Line(n).LineItemNumber
Funktioniert natürlich nur, wenn du das Template auch qualified machst:
d Line_t ds template qualified
-
Danke für die rasche Antwort.
Hat aber leider noch nicht funktioniert
dLine_t ds template qualified
d LineItemNumber...
d 3a
d ProductNumber...
d 10a
dhead_t ds qualified inz
d OrderNumber 10a
d VersionNumber likeDS(VersionNumber_t)
d Line likeDS(Line_t) Dim(05)
d Cnt_Line 3 0
dorders ds qualified inz
d head LikeDS(head_t)
EVAL orders ORDERS.HEAD.ORDERNUMBER = '1TJW5S 2 '
ORDERS.HEAD.VERSIONNUMBER.VERSIONNAME = 'XML.EANCOM.MBO'
ORDERS.HEAD.VERSIONNUMBER.VERSIONNO = '8.1 '
ORDERS.HEAD.LINE.LINEITEMNUMBER(1) = '1 '
ORDERS.HEAD.LINE.PRODUCTNUMBER(1) = 'E1527875LG'
ORDERS.HEAD.LINE.LINEITEMNUMBER(2) = '2 '
ORDERS.HEAD.LINE.PRODUCTNUMBER(2) = 'N1527875RL'
ORDERS.HEAD.LINE.LINEITEMNUMBER(3) = ' '
ORDERS.HEAD.LINE.PRODUCTNUMBER(3) = ' '
ORDERS.HEAD.LINE.LINEITEMNUMBER(4) = ' '
eval f41 = head_t.Line(1).LineItemNumber;
eval f42 = head_t.Line(2).LineItemNumber;
EVAL head_t.Line(1)
HEAD_T.LINE.LINEITEMNUMBER(1) = ' '
HEAD_T.LINE.PRODUCTNUMBER(1) = ' '
Gruß
Franco
-
Wie sieht denn das zugehörige XML-INTO Statement aus?
Birgitta
-
Guten Morgen,
/free
options = 'doc=file case=any allowmissing=yes allowextra=yes ' +
'countprefix=cnt_ datasubf=data ';
Filename = '/XMLOrderIN/20191031_221735_1TJW5S_2.xml';
xml-into orders %xml(%Trim(Filename)ptions);
... ... ...
Gruß
Franco
-
Guten Morgen,
gibt es im Forum vielleicht noch eine Idee?
Franco
-
Hallo Franko,
anbei die Lösung für das Problem
HTML-Code:
ctl-opt dftactgrp(*no);
//------------------------------------------------------------------//
// //
// Parsen XML-DATEN - CCSID DER XML-DATEI MUSS 1208 SEIN //
// //
//----------------- //
// R.Ross 11.2019 * //
//------------------------------------------------------------------//
// XML-Array - Root //
//------------------------------------------------------------------//
dcl-ds Orders qualified;
Head likeds(Head);
end-ds;
//------------------------------------------------------------------//
// Template Head //
//------------------------------------------------------------------//
dcl-ds Head template qualified;
VersionNumber likeds(VersionNumber);
OrderNumber char(20);
Line likeds(Line) dim(05);
Cnt_Line int(10);
end-ds;
dcl-ds VersionNumber template qualified;
VersionName char(20);
VersionNo char(20);
end-ds;
//------------------------------------------------------------------//
// Template Line - Enthält die Produkte //
//------------------------------------------------------------------//
dcl-ds Line template qualified;
LineItemNumber char(03);
ProductNumber char(10);
end-ds;
//------------------------------------------------------------------//
// Processing //
//------------------------------------------------------------------//
main();
*inlr = *on;
//------------------------------------------------------------------//
// Main //
//------------------------------------------------------------------//
dcl-proc Main;
dcl-s LocOptions varchar(128); // XML-Options
dcl-s LocFile varchar(128); // File
dcl-s LocInd uns(10); // Index
dcl-s ItemNumber like(Line.LineItemNumber);
dcl-s ProductNumber like(Line.ProductNumber);
LocFile = '/Home/Import/xml/20191031_221735_1TJW5S_2.xml';
LocOptions = 'doc=file case=any allowextra=yes +
countprefix=cnt_ datasubf=data';
clear Orders; // Init XML-Struktur
xml-into Orders %xml(LocFile:LocOptions);
for LocInd = 1 to Orders.Head.Cnt_Line; // Loop Produkte
ItemNumber = Orders.Head.Line(LocInd).LineItemNumber;
ProductNumber = Orders.Head.Line(LocInd).ProductNumber;
endfor;
end-proc;
//------------------------------------------------------------------//
-
Lieber Rainer ...
... und wenn Du nun noch einen Konverter hast, der die XSD gleich in DS Templates umsetzt, bist Du mein Tagesheld. Good Job!
kf
-
Ein Konverter wäre richtig cool. Es würde auch mit SQL gehen
HTML-Code:
SELECT *
FROM XMLTABLE('/ORDERS/HEAD/LINE'
PASSING xmlparse(
DOCUMENT get_blob_from_file('/Home/Import/xml/mein.xml'))
COLUMNS
"ProductNumber" varchar(20) PATH 'ProductNumber',
"ProductName" varchar(20) PATH 'ProductName'
);
-
Funktioniert super, dann halt total free. Gruß Franco FDH
-
Das freut mich sehr, dass es jetzt funktioniert
Habt Ihr Interesse coole Webanwendungen auf IBM i zu programmieren?
- Responsive Webdesign für PC, iPad und Smartphone
http://www.myhofi.com/dev/html/DataViewResponsive.html
- Stammdaten verwalten http://www.myhofi.com/tms/HTML/MySubfileApp04.html
- Projektverwaltung mit Gantt http://www.myhofi.com/tms/HTML/MyGantt.html
- schnelle Volltextsuche http://www.myhofi.com/music/html/musicsearch.html
Hier gibts die Workshops https://www.toolmaker.de/schulungen/
Herzliche Grüße
Rainer Ross It-Beratung
Similar Threads
-
By fdh in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 20-11-19, 13:43
-
By it-dol in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 24-07-14, 13:05
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