×

Good News Everybody!

The new search engine is LIVE!

Please report any problems to david (at) midrange.com.




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.


This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2026 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.