× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@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.


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

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

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