Anmelden

View Full Version : HTML-File einlesen mit XML-INTO



Seiten : [1] 2

alex61
22-08-19, 11:51
Hallo zusammen,
ich möche mit XML-INTO ein HTML-File einlesen, was nur zum Teil funktioniert.
Ich weiss, daß man das mit qualifizierten Strukturen gebacken bekommt.
Das HTML ist wie folgt aufgebaut:
Ein Block mit Info-Feldern, dann folgt auf der selben Stelle ein Block mit Auftragskopfdaten und dann innerhalb der Kopfdaten ein Block mit Auftragspositionen (für 1 - n Positionen).
Ich bekomme einwandfrei ausgelesen die Auftragskopfdaten und die Positionen. Nur den
1. Block mit den Infofeldern bekomme ich nicht ausgelesen obwohl definiert. Was mache ich
falsch ? Für eine Info wäre ich dankbar.
Gruss A61

Fuerchau
22-08-19, 12:38
Dafür benötigst du 2 XML-Into, da nur 1 hierarchische Struktur eingelesen werden kann.
Dafür gibst du den Pfad der 1. oder 2. Hauptstruktur zum einlesen an.
Un da du das schon weißt, du benötigst qualifizierte und hierarchische DS'n.
Schau dir hierzu diesen Beitrag an:
http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/21837-XML-Datei-einlesen

alex61
22-08-19, 13:04
danke schon mal für die Info. Ich probiere es aus !

alex61
22-08-19, 13:14
so sieht also das HTML aus. Und da reichen dann 2XML-INTO ?
einlesen kann ich die Daten vom Acknowledge-Block und Orderline-Block.
Den Document-Block nicht und die Daten aus dem Transactions-Block bekomme ich
auch nicht eingelesen.

<?xml version="1.0" encoding="utf-8"?>
<SHARK-ERP>
<Document>
<Type>SHARKLINEACK</Type>
<Date>2019-08-21 15:09:04</Date>
<Sender>SHARKLINK</Sender>
<Receiver>HOST</Receiver>
<DocNumber>583</DocNumber>
</Document>
<Acknowledge>
<Status>OK</Status>
<OrderTypeID>17</OrderTypeID>
<OrderType>6</OrderType>
<OrderNumber>KM#0000000011</OrderNumber>
<DeliveryDate>2019-08-21 15:09:03.877</DeliveryDate>
<Owner />
<DeliveryNoteNumber />
<Misc1 />
<Misc2 />
<Misc3 />
<Misc4 />
<Misc5 />
<Misc6 />
<Misc7 />
<Misc8 />
<Misc9 />
<Misc10 />
<OrderLine>
<Status>OK</Status>
<LineNumber>1</LineNumber>
<ArticleNumber>00305397</ArticleNumber>
<QtyOrdered>10.00</QtyOrdered>
<Qty>10.00</Qty>
<CostCenter />
<CostCenterText />
<User>adm</User>
<Time>2019-08-21 15:09:03</Time>
<Misc1 />
<Misc2 />
<Misc3 />
<Misc4 />
<Misc5 />
<Transactions>
<Transaction>
<Qty>10.00</Qty>
<LocationAddress>A2-1-A1</LocationAddress>
<Zone>A</Zone>
<User>adm</User>
<BatchNumber />
</Transaction>
</Transactions>
</OrderLine>
</Acknowledge>
</SHARK-ERP>

alex61
22-08-19, 14:55
haut irgendwie nicht hin !

alex61
23-08-19, 10:02
Hallo zusammen, muss leider nochmals stören :-)

wenn ich also jetzt 2 XML-INTO brauche, da in meinem HTML 2 Blöcke auf höchster Hierarchie vorhanden sind, wie sähen denn dann die Aufrufe aus ?

ich habe in meinem Programm bisher folgendes codiert:

XML-INTO SHARK_ERP %xml(XMLName : XMLOption);

SHARK_ERP ist wie folgt definiert:

SHARK_ERP DS Qualified
Acknowledge Likeds(Acknowledge)

Acknowledge ist einer der Blöcke auf der höchsten Ebene. Darunter sind noch Unterstrukturen. Die Daten dort werden aber allesamt korrekt ausgelesen (auch die in den Unterstrukturen).

Der andere Block heisst Document und steht ebenfalls auf höchster Ebene (ohne Unterstrukturen, nur mit ein paar Feldern). Das will ich aber auch ausgelesen haben.

wie muss ich also die 2 XML-INTO codieren. Für Infos besten Dank und schönes WE.

Alex

alex61
23-08-19, 10:20
und dann habe ich noch eine Frage:

wenn ich im HTML einen langen Feldnamen habe, den ich im Programm nicht unterbekomme, was kann ich dann tun (Editor mault) ?

Beispiel (Alternativearticlenumber):

D Article DS Qualified
D ID 30
D Articlenumber 30
D Alternatvivearticlenumber 30

B.Hauser
23-08-19, 11:24
Wenn Du Fix-Format D-Bestimmungen verwendest musst Du eine Fortsetzungszeile verwenden.
Der Umbruch wird durch 3 aufeinanderfolgende Punkte gekennzeichnet.

Beispiel:

D AlternativeArtikelNr...
D S 10A
D DerLangeName...
D kannAuchUeber...
D MehrereZeilen...
D Umgebrochen...
D Werden S 10A

Ich würde Dir allerdings Free-Format D-Bestimmungen empfehlen:

DCL-S AlternativeArtikelNr Char(10);

Birgitta

alex61
23-08-19, 11:37
ganz lieben Dank für die Antwort. Toll, das ging schon mal !!

Hast Du evtl. auf die Frage vorher auch eine Info :-) ?

Wenn ja, vielleicht einen kurzen Rat nur. Ich sage schon mal danke und ein schönes WE

Alex

Fuerchau
23-08-19, 13:32
Du brauchst eine DS "Transactions", die ein Array von "Transaction"-DS'n enthält.
Transaction selber besteht nur aus Feldern ohne weitere Strukturen.
RPGLE unterscheidet nicht zwischen Knoten und Attributen.