Partner400 Logo
    XML-SAX Utility Program
   

 

This is a simple example of using the XML-SAX op-code in RPG. While it is simple it is also quite useful since it will prepare a listing of all of the components in an XML document - if you plan to process the document this can be very useful in testing your code.


  All About Us

  Where To See Us

  Magazine Articles

  Downloads

  Rational RDi

  On-site Training

  The RPG Redbook

  Home Page

 

 

 

 

 

 

 

 

 

 



	  
h Option(*SrcStmt : *NoDebugIO) DftActGrp(*No)

FQPRINT O F 132 PRINTER
D myHandler Pr 10I 0
D commArea Like(myCommArea)
D event 10I 0 VALUE
D pstring * VALUE
D stringLen 20I 0 VALUE
D exceptionId 10I 0 VALUE

d i s 10i 0

d myCommArea s 1a

d eventCodeData DS
d 10i 0 Inz(*XML_START_DOCUMENT)
d 10i 0 Inz(*XML_VERSION_INFO)
d 10i 0 Inz(*XML_ENCODING_DECL)
d 10i 0 Inz(*XML_STANDALONE_DECL)
d 10i 0 Inz(*XML_DOCTYPE_DECL)
d 10i 0 Inz(*XML_START_ELEMENT)
d 10i 0 Inz(*XML_CHARS)
d 10i 0 Inz(*XML_PREDEF_REF)
d 10i 0 Inz(*XML_UCS2_REF)
d 10i 0 Inz(*XML_UNKNOWN_REF)
d 10i 0 Inz(*XML_END_ELEMENT)
d 10i 0 Inz(*XML_ATTR_NAME)
d 10i 0 Inz(*XML_ATTR_CHARS)
d 10i 0 Inz(*XML_ATTR_PREDEF_REF)
d 10i 0 Inz(*XML_ATTR_UCS2_REF)
d 10i 0 Inz(*XML_UNKNOWN_ATTR_REF)
d 10i 0 Inz(*XML_END_ATTR)
d 10i 0 Inz(*XML_PI_TARGET)
d 10i 0 Inz(*XML_PI_DATA)
d 10i 0 Inz(*XML_START_CDATA)
d 10i 0 Inz(*XML_CHARS)
d 10i 0 Inz(*XML_END_CDATA)
d 10i 0 Inz(*XML_COMMENT)
d 10i 0 Inz(*XML_EXCEPTION)
d 10i 0 Inz(*XML_END_DOCUMENT)

d eventCodes 10i 0 Dim(25) Overlay(eventCodeData)

d eventNameData DS
d 21a Inz('*XML_START_DOCUMENT')
d 21a Inz('*XML_VERSION_INFO')
d 21a Inz('*XML_ENCODING_DECL')
d 21a Inz('*XML_STANDALONE_DECL')
d 21a Inz('*XML_DOCTYPE_DECL')
d 21a Inz('*XML_START_ELEMENT')
d 21a Inz('*XML_CHARS')
d 21a Inz('*XML_PREDEF_REF')
d 21a Inz('*XML_UCS2_REF')
d 21a Inz('*XML_UNKNOWN_REF')
d 21a Inz('*XML_END_ELEMENT')
d 21a Inz('*XML_ATTR_NAME')
d 21a Inz('*XML_ATTR_CHARS')
d 21a Inz('*XML_ATTR_PREDEF_REF')
d 21a Inz('*XML_ATTR_UCS2_REF')
d 21a Inz('*XML_UNKNOWN_ATTR_REF')
d 21a Inz('*XML_END_ATTR')
d 21a Inz('*XML_PI_TARGET')
d 21a Inz('*XML_PI_DATA')
d 21a Inz('*XML_START_CDATA')
d 21a Inz('*XML_CHARS')
d 21a Inz('*XML_END_CDATA')
d 21a Inz('*XML_COMMENT')
d 21a Inz('*XML_EXCEPTION')
d 21a Inz('*XML_END_DOCUMENT')

d eventNames 21a Dim(25) Overlay(eventNameData)

// Print field definitions
d data 90a
d dataLength 5p 0
d eventCode 5p 0
d eventName 21a

/Free

XML-SAX %Handler(MyHandler: myCommArea )
%XML( '/Partner400/XMLSAXDOC.xml': 'doc=file');

*InLR = *On;

/End-free

OQPRINT D
O E PrintEvent
O eventCode J 10
O eventName 35
O dataLength J 40
O data 132

// SAX handler myHandler
P myHandler B
D PI 10I 0
D commArea Like(myCommArea)
D event 10I 0 VALUE
D pstring * VALUE
D stringLen 20I 0 VALUE
D exceptionId 10I 0 VALUE

D string S 65535A Based(pString)
D UCS2String S 16383C
D UCS2StringLen S 5i 0
D returnCode S 10I 0 INZ(0)
D element s 10i 0
D eventIndex s 5i 0

/free

eventCode = event; // Set up event code
dataLength = stringLen; // and string length for printing

eventIndex = %lookup(event : eventCodes ); // identify event

if eventIndex > 0;
eventName = eventNames( eventIndex );

if stringLen > 0; // Pointer seems to be unreliable
if ( event = *XML_UCS2_REF OR event = *XML_ATTR_UCS2_REF );
UCS2StringLen = ( stringLen / 2 );
data = %char( %subst(UCS2String : 1 : UCS2StringLen ) );
else;
data = %subst(string : 1 : stringLen);
endif;
else;
data = '** No Data **';
endif;
else; // Unknown event
eventName = '** Unknown event code ** ';
data = '';
endif;

Except PrintEvent;

return returnCode;

/end-free
P E
     
Return to Home Page  

Want more information?
Got a question or comment about the site?
Please feel free to Contact Us at any time.}