-
XML aus MQ parsen
Hallo Leute,
ich habe bei uns in der Firma folgende Aufgabe zu lösen.
Ich erhalte via Message Queue Messages die XML beinhalten.
Nun soll ich diese XML mit den API's, die im QXML4PR520/ 'XML RPG Parser 5,2 API Interface' zur Verfügung stehen, parsen und in DB2 stellen.
Für den Umgang mit diesen API's stehen von der IBM einige kleine Beispielprogramme zur Verfügung, die jedoch immer auf XML-Files zugreifen, die im IFS abgelegt sind.
Code aus dem Beispielprogramm
ALLOC 10 GetTagOpt
ALLOC 256 XmlFile
ALLOC 256 strgbuf
Move input to string areas >>
EVAL %str(XmlFile:256) = %TRIMR(XmlFile)
EVAL %str(GetTagOpt:256)='*'
Initialize XML environement, provide pointer to DOM exception area
CALLP QxmlInit(ENVDATA)
Create a Parser object, set validation options and parse
EVAL DomParse = QxmlXercesDOMParser_new(PRSDATA)
Validate document arg - set to 1 if DTD available
and you want to use it
CALLP QxmlXercesDOMParser_setValidationScheme
(DomParse : 0)
CALLP QxmlXercesDOMParser_parse_SystemId(DomParse:
XmlFile*:Qxml_CCSID37:0)
Get parse document
EVAL DomDoc = QxmlXercesDOMParser_getDocument
(DomParse)
Get a node list of all ('*') elements by tag name
EVAL DomNodeList = QxmlDOMDocument_getElementsByTagName
(DomDoc:GetTagOpt:Qxml_CHARSTR:1)
Ende Code
Mein Problem liegt nun darin, dass ich nicht weiss wie ich die XML aus der Message in den Parser bringe. Jemand gab mir den Tipp ich soll es anstelle des API's QxmlXercesDOMParser_parse_SysemId( ) zum parsen mit den API's
QxmlMemBufInputSource_new( )
QXmlXercesDOMParser_parse_InputSource( )
probieren. Hab ich gemacht, das funktioniert bei mir nicht, da spätestens beim Erstellen der DomNodeList das Programm mit der Meldung 'Zeiger nicht gesetzt' stoppt.
Nun die prinzipielle Frage: Bin ich mit diesen API's auf dem richtigen Weg oder liege ich völlig falsch? Bin um jeden Tipp dankbar.
Roger M.
-
Hallo Roger,
was macht denn der MQGET mit den Messages?
Du könntest diese ja zunächst als .xml im IFS abstellen
(bzw. zeilenweise sammeln und dann als Datei ins IFS kopieren)
Gruß,
Robert
-
Hallo Robert
Besten Dank für den Tipp. Auf die Idee bin ich auch schon gekommen,
nur würde ich mir den Umweg lieber ersparen.
Ich hab es auch schon ausprobiert und von mir in die Message Queue gestellte
Testdaten ausgelesen, die Testdaten als .mxl in das IFS gestellt und versucht das ganze
zu parsen. Das Programm stürzt, sobald die DOMNodeList erstellt werden sollte,
wobei ich hier den leisen Verdacht habe, das es an der Qualität meiner Testdaten
liegt.
Gruss, Roger
-
oder an der Qualität der .dtd (Übereinstimmung?)
Versuche mal, die Datei aus dem IFS mit dem Explorer zu öffnen.
Gruß,
Robert
-
Die Daten, mit denen ich momentan am probieren bin, sehen in etwa
so aus: (Bei Kopieren ins Forum gehen einige Zeichen verloren)
xml version ="1.0"
<Order id="123" receiveDate="2003-06-20">
<Item id="123XML4C" price="250.00">XML4C< font>Item>
<Item id="456eRPG" price="400.00">eRPG< font>Item>
<Item id="789WDSc" price="0.50">WDSc 5< font>Item>
<Payment type="CreditCard">
<CreditCard type="VISA" expDate="2003-10" number="1234123412341234" />
Payment>
Order>
und die kann ich im IFS mit dem Browser und mit dem XML Spy anschauen.
Gruss, Roger
-
wieviel genau geht denn da verloren?
M.E. müsste das etwa so aussehen:
PHP-Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE DataSet SYSTEM "deine.dtd">
<Data Set>
<Order id>123</Order id>
<receiveDate>2003-06-20</receiveDate>
<Item id>123XML4C</Item id>
u.s.w.
</Data Set>
-
nicht viel: die Fragezeichen vor und hinter der xml-version und
die Slashes vor payment und order.
Mit Daten wie aus deinem Beispiel hab ichs auch schon probiert
(also inkl. Encoding und DTD)
Die DTD hab ich mal weggelassen, weil ich zum üben das XML-File
nicht unbedingt validieren muss und weil das ! vor dem DOCType
beim schreiben des XML in die IFS falsch umgesetzt wird (als Pipe)
-
du bist 100% auf dem richtigen weg.
wo sagter denn dass n pointer nicht gesetzt sei?
ich würd aber sagen du schmeisst den ibm parser weg
und benutzt expat.
ders flotter und funzt besser.
der ibm parser war mir immer zu unfertig und hatte fehler die sich niemand erklären konnt...
Gruß
Martin
-
Du musst unterscheiden zwischen Nodes und Attributen.
"Item" ist ein Node mit den Attributen "Id" und "Price".
"Order" ist ein Node mit den Attributen "Id" und "receiveDate".
Du musst beim Parsen schon genau den Aufbau abfragen, ob du einen Node und den Wert dazu oder einen Node mit Attributen hast.
-
Besten Dank an alle für euren Input.
Ich habe bei uns in der Fa. jemanden gefunden, der mir
weiterhelfen kann (nächste Woche, wenn er denn aus
dem Urlaub zurück ist).. und wenn er's nicht kann, bin
ich sofort wieder hier im Forum..
Nochmals vielen Dank..
Roger
-
Hallo allerseits,
nur für die die's interessiert. Mein interner Kontakt hat
mir sehr helfen können
Nun weiss ich, dass der Weg mit
QxmlMemBufInputSource_new( )
QXmlXercesDOMParser_parse_InputSource( )
für das parsen aus MQ wirklich der richtige Weg ist.
Wenn man die geforderten Parameter richtig übergibt,
die nötigen Pointers definiert hat und das gelieferte XML
valide ist, funktioniert das ganze ohne Probleme.
Besten Dank nochmal an alle
Gruss, Roger
-
Fein, dann ist Dir ja wohl geholfen.
ich wollte nur noch erwähnen, daß ich meine eigene Erfahrung darin habe, wie man eine größere AS400-Anwendung Web-fähig macht. Habe dort auch MQ-Series verwendet, und XML geparsed und erzeugt. Da mir der IBM-Parser ebenfalls nicht zusagte, habe ich kurzerhand selber einen Parser und die ganze Middleware geschrieben, und war mit Erfolg.
Similar Threads
-
By mom in forum IBM i Hauptforum
Antworten: 30
Letzter Beitrag: 22-01-07, 15:03
-
By vige1000 in forum NEWSboard Linux
Antworten: 4
Letzter Beitrag: 21-12-06, 11:56
-
By Weki in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 11-09-06, 13:31
-
By kuempi von stein in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 05-07-06, 08:50
-
By DEVJO in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 18-04-05, 09:38
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