Generate Parser Cross-Ref File for use in Parsing the XML data
h option(*nodebugio) dftactgrp(*no) fvxmlxrf if a e k disk fvxmlxrf1 if e k disk rename(xmlxrfr:record1) f prefix(#) /copy *libl/qrpglesrc,parser_h d $counter s 5s 0 inz(0) * Main Routine * c *entry plist c parm fileId c parm filePath /free XML = %trim(filePath); xml-sax %handler(mySaxHandler: ignoreMe) %XML(XML: 'doc=file'); *inlr = *on; /end-free /copy *libl/qrpglesrc,parser * Data Manipulation * P myDataHandler B d myDataHandler PI 10i 0 d stackname 65535a varying d value d stackval 65535a varying d value /free eval fieldId = stackname; Chain (fileId:fieldId) Vxmlxrf; If not %found(Vxmlxrf); clear xmlxrfr; eval x1fileid = fileId; eval x1fldid = fieldId; dou not %found(Vxmlxrf1); eval $counter = $counter + 1; eval x1unid = 'XML_' + %trim(%editc($counter:'Z')); Chain (fileId:x1unid) Vxmlxrf1; enddo; write xmlxrfr; EndIF; return 0; /end-free P E
Command to Call the Parser Cross-Ref Program
CMD PROMPT('Generate Parser Cross Ref File') PARM KWD(FILEID) TYPE(*CHAR) LEN(20) MIN(1) + MAX(1) PROMPT('File Id') PARM KWD(FILEPATH) TYPE(*CHAR) LEN(250) MIN(1) + MAX(1) PROMPT('File Path')
Create the command using CRTCMD
CRTCMD CMD(command_name) PGM(program_name)Now run the command over the XML file giving it an ID
command_name FILEID(file_id) FILEPATH(file_path)
I used the file id as MyOrders so here is my output in VXMLXRF file after running that command.
XML File ID Short Name XML Field ID MyOrders XML_1 /Orders/Order/@Type MyOrders XML_2 /Orders/Order/OrderID MyOrders XML_3 /Orders/Order/CustNumber MyOrders XML_4 /Orders/Order/OrderDate MyOrders XML_5 /Orders/Order/CustPONumber MyOrders XML_6 /Orders/Order/OrderTotal MyOrders XML_7 /Orders/Order/OrderLine/OrderlineID MyOrders XML_8 /Orders/Order/OrderLine/ItemID MyOrders XML_9 /Orders/Order/OrderLine/ItemDescription MyOrders XML_10 /Orders/Order/OrderLine/Quantity MyOrders XML_11 /Orders/Order/OrderLine/Price MyOrders XML_12 /Orders/Order/OrderLine MyOrders XML_13 /Orders/Order MyOrders XML_14 /Orders
IMPORTANT : Never clear the VXMLXRF file if you get a new layout for the same XML, just run the command again over the new XML file and it will find any new fields and map them. Otherwise if you clear the file it may name the old fields to new id and then you have to go change your Parsing program to reference the new Ids.
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.