|
The previous version (XMLPR400) is free and can be downloaded from alphaworks. Recently tt has been promoted to XMLPR500 that is free for some models and chargeable (150$) for others depending on the country and on your representative. If you have to parse simple documents %scan and %subst etc. can do the job, but for large documents, with attributes even if you are a good programmer why reinvent the wheel ? Beppe. ----- Original Message ----- From: "M Boyce" <plexjob@xxxxxxxxxxx> To: <rpg400-l@xxxxxxxxxxxx> Sent: Monday, May 03, 2004 11:29 PM Subject: Re: How to scan an entire array all at once (Corrected source) > Hi, what is IBM XMLPR500? > > If its not free then its not an option - the client will not pay for it. > I do not see it as a server function on the client AS/400. > > thanks > Marilyn > > > >From: "Beppe Costagliola" <beppecosta@xxxxxxxx> > >Reply-To: RPG programming on the AS400 / iSeries <rpg400-l@xxxxxxxxxxxx> > >To: "RPG programming on the AS400 / iSeries" <rpg400-l@xxxxxxxxxxxx> > >Subject: Re: How to scan an entire array all at once (Corrected source) > >Date: Mon, 3 May 2004 17:32:58 +0200 > > > >Currently we succesfully parse MQ messages with IBM XMLPR500 in this way. > > > >first we get the lengh of the message: > > > >MQGMO.GMOPT = GMWT; // MQGMO_WAIT > >MQGMO.GMOPT += GMLK; // MQGMO_LOCK > >MQGMO.GMOPT += GMATM; // MQGMO_ACCEPT_TRUNCATED_MSG > >MQGMO.GMOPT += GMCONV; // MQGMO_CONVERT > >MQGMO.GMOPT += GMBRWF; // MQGMO_BROWSE_FIRST > >MQMD.MDMID = MINONE; // MQMI_NONE > >MQMD.MDCID = CINONE; // MQCI_NONE > >BUFLEN = 0; > >BUFPTR = %alloc(1); > >MQGET(HCONN: HQGET: MQMD: MQGMO: BUFLEN: BUFPTR: > > MSGLEN: CMPCOD: REASON); > > > >then we get the message > > > >BUFLEN = MSGLEN; > >BUFPTR = %realloc(BUFPTR:BUFLEN); > >MQGMO.GMOPT = GMNWT; // MQGMO_NO_WAIT > >MQGMO.GMOPT += GMMUC; // MQGMO_MSG_UNDER_CURSOR > >MQGMO.GMOPT += GMCONV; // MQGMO_CONVERT > >MQMD.MDMID = MINONE; // MsgId selector > >MQMD.MDCID = CINONE; // CorrelId selector > >MQMD.MDCSI = 280; // CCSID locale > >MQGET(HCONN: HQGET: MQMD: MQGMO: BUFLEN: BUFPTR: > > MSGLEN: CMPCOD: REASON); > > > >then we call a program that parses the message only to get the method > > > >MQ_PARSE (BUFPTR:MSGLEN); > > > >This program parses the document and finds the method to call (here we have > >something like > ><Process>XYZ</Process> where XYZ is the program that actually parses the > >specific message: > > > >QxmlInit(envData); > >DomParse =QxmlXercesDOMParser_new(PenvData); > >MemBufInputSource = QxmlMemBufInputSource_new( > > MSGPTR:MSGLEN:buf:280:0:0); > >QxmlXercesDOMParser_parse_InputSource(DomParse:MemBufInputSource); > >DomDoc = QxmlXercesDOMParser_getDocument(DomParse); > >GetTagOpt = %alloc(256); > >%str(GetTagOpt:256) = 'Process'; > >NodeList = QxmlDOMDocument_getElementsByTagName > > (DomDoc:GetTagOpt:Qxml_CHARSTR:0); > >Node = QxmlDOMNodeList_item(NodeList:0); > >if QxmlDOMNode_isNull(Node) = Qxml_NODNOTNUL; > > if QxmlDOMNode_getNodeType(Node) = Qxml_ELMNT_NOD; > > Child = QxmlDOMNode_getFirstChild(Node); > > if QxmlDOMNode_getNodeType(Child) = Qxml_TEXT_NOD; > > NodeValue =QxmlDOMNODE_getNodeValue(Child); > > QxmlTranscode(NodeValue:Qxml_UNICODE:oStgP:BpP:Bap:280); > > Method = %str(oStgP); > > endif; > > endif; > >endif; > > > >and then call a program (in this example XYZ) that actually retrieves the > >elements from the parsed document: > > > >call(e) Method > >parm DomDoc > >parm MSGPTR > >parm MSGLEN > > > >------------ > >Beppe. > > > >----- Original Message ----- > >From: "Rooney, Michael P" <michael.p.rooney@xxxxxxxxxxxxx> > >To: "RPG programming on the AS400 / iSeries" <rpg400-l@xxxxxxxxxxxx> > >Sent: Monday, May 03, 2004 5:02 PM > >Subject: RE: How to scan an entire array all at once (Corrected source) > > > > > > > > > > Marilyn, > > > > > > In cutting & pasting previous post, I inadvertantly omitted some source > > > statements. The following is the corrected source: > > > > > > Regards, > > > > > > Michael Rooney > > > Citigroup International > > > > > > > > > H > > > > >********************************************************************* > > > * Bind with service program LIBMQM in library QMQM and > > > * service program QC2IO in QSYS library. > > > * > > > * Compile using: > > > * > > > * CRTRPGMOD MODULE(MQSample) > > > * CRTPGM PGM(MQSample) BNDSRVPGM(QMQM/LIBMQM QSYS/QC2IO) > > > * > > > > >********************************************************************* > > > DMQSample PR > > > * > > > DMQCC_FAILED C CONST(2) > > > D* Message Identifier > > > DMQMI_NONE C CONST(X'00000000000000000000- > > > D 0000000000000000000000000000- > > > D ') > > > D* > > > D* Correlation Identifier > > > DMQCI_NONE C CONST(X'00000000000000000000- > > > D 0000000000000000000000000000- > > > D ') > > > D* Open Options > > > DMQOO_... > > > DINPUT_AS_Q_DEF C CONST(1) > > > DMQOO_BROWSE C CONST(8) > > > D* Object Types > > > DMQOT_Q C CONST(1) > > > DMQRC_NO_MSG_... > > > DAVAILABLE C CONST(2033) > > > * > > > D/COPY QMQM/QRPGLESRC,CMQG > > > DMQGMO DS > > > D/COPY QMQM/QRPGLESRC,CMQGMOG > > > DMQMD DS > > > D/COPY QMQM/QRPGLESRC,CMQMDG > > > DMQOD DS > > > D/COPY QMQM/QRPGLESRC,CMQODG > > > * > > > DMQSample PI > > > * > > > * > > > Dprintf PR EXTPROC('printf') > > > D * value options(*string) > > > * Queue Manager Name > > > DQMgrName S 48A inz(*blank) > > > * Connection handle > > > DHconn S 10I 0 > > > * Completion code > > > DCompCode S 10I 0 > > > * Reason code qualifying CompCode > > > DReason S 10I 0 > > > * Options that control the action of MQOPEN > > > DOptions S 10I 0 > > > * Object handle for inquirying MQ Manager > > > DHobj S 10I 0 > > > * Length of the message > > > DBufferLength S 10I 0 > > > * Length of the message > > > DDataLength S 10I 0 > > > * Selector Count for MQINQ > > > DReplyptr S * > > > * > > > C EVAL QMgrName = ' ' > > > * > > > C MONITOR > > > * > > > C CALLP > >MQCONN(QMgrName:Hconn:CompCode:Reason) > > > * > > > C ON-ERROR > > > C callp printf('Error loading MQSeries Prod'+ > > > C 'uct.....program terminating.' + > > > C x'15') > > > C move *on *inlr > > > C return > > > C ENDMON > > > * > > > C if CompCode = MQCC_FAILED > > > * > > > C callp printf('Program failed to connect > >to'+ > > > C ' Queue > >Manager('+%trimr(QMgrName)+').' > >+ > > > C ' Reason Code is '+%char(Reason)+'.'+ > > > C x'15') > > > * > > > C callp printf('Program is terminating.' + > > > C x'15') > > > * > > > C move *on *inlr > > > C return > > > C endif > > > * > > > * Set Open Options to Input & Browse > > > * > > > C EVAL Options = (MQOO_BROWSE + > >MQOO_INPUT_AS_Q_DEF) > > > /* Get the queue name */ > > > C EVAL ODON = 'EXCELLER.LATAM.LISTEN' > > > * > > > C EVAL ODOT = MQOT_Q > > > * > > > C CALLP > >MQOPEN(Hconn:MQOD:Options:Hobj:CompCode: > > > C Reason) > > > C CompCode IFEQ MQCC_FAILED > > > C callp printf('Program failed to open queue > >'+ > > > C %trimr(ODON) +'.' + ' Reason Code is > >'+ > > > C %char(Reason)+'.'+ > > > C 'Program is terminating.' + > > > C x'15') > > > * > > > C move *on *inlr > > > C return > > > C endif > > > > >******************************************************************** > > > * Prepare to Get Messages from Queue > >* > > > > >******************************************************************** > > > * > > > * Define Message Buffer Length > > > * > > > C EVAL BufferLength = 10000 > > > C eval Replyptr = %alloc(BufferLength) > > > * > > > C GetNxtMsg tag > > > * > > > * (re)Set Get Message Options to Accept Truncated Message, Fail if > >Quiescing & Browse > > > * > > > C EVAL GMOPT = (64 + 8192 + 32 + 16384) > > > * > > > * Initialize Message and Correlation Id (may have been modified by > >MQPUT). > > > * > > > C EVAL MDMID = MQMI_NONE > > > C EVAL MDCID = MQCI_NONE > > > * > > > * Execute MQGET in Browse Mode > > > * > > > C CALLP MQGET(Hconn:Hobj:MQMD:MQGMO: > > > C BufferLength:Replyptr: > > > C DataLength:CompCode: > > > C REASON) > > > * > > > C CompCode IFEQ MQCC_FAILED > > > C if REASON = MQRC_NO_MSG_AVAILABLE > > > C callp printf('Program completed!' + > > > C x'15') > > > * > > > C else > > > C callp printf('MQGET failed! '+ > > > C 'Reason Code is '+ > > > C > > > C %char(Reason)+'.'+ > > > C 'Program is terminating.' + > > > C x'15') > > > * > > > C endif > > > * > > > C dealloc Replyptr > > > C move *on *inlr > > > C return > > > * > > > C endif > > > * > > > C callp printf(%trimr(%str(Replyptr)) + > > > C x'15') > > > * > > > C goto GetNxtMsg > > > > > > _______________________________________________ > > > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing > >list > > > To post a message email: RPG400-L@xxxxxxxxxxxx > > > To subscribe, unsubscribe, or change list options, > > > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > > > or email: RPG400-L-request@xxxxxxxxxxxx > > > Before posting, please take a moment to review the archives > > > at http://archive.midrange.com/rpg400-l. > > > >_______________________________________________ > >This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list > >To post a message email: RPG400-L@xxxxxxxxxxxx > >To subscribe, unsubscribe, or change list options, > >visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > >or email: RPG400-L-request@xxxxxxxxxxxx > >Before posting, please take a moment to review the archives > >at http://archive.midrange.com/rpg400-l. > > > > _________________________________________________________________ > MSN Premium with Virus Guard and Firewall* from McAfee® Security : 2 months > FREE* > http://join.msn.com/?pgmarket=en-ca&page=byoa/prem&xAPID=1994&DI=1034&SU=http://hotmail.com/enca&HL=Market_MSNIS_Taglines > > _______________________________________________ > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing list > To post a message email: RPG400-L@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > or email: RPG400-L-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.