Figure 6: RPG program IFS3XML, which generates XML from the data in the CUSTMAS file

     H DFTACTGRP(*NO)
     H BNDDIR('QC2LE')

     FCUSTMAS   IF   E             DISK    BLOCK(*YES)

      /copy ifsio_h

     D CRLF            C                   x'0d25'
     D fd              s             10I 0
     D data            s           1000A   varying

      /free

         fd = open('/home/klemscot/custmas.xml'
                  : O_CREAT + O_TRUNC + O_WRONLY + O_CCSID
                     + O_TEXTDATA + O_TEXT_CREAT
                  : M_RDWR
                  : 819
                  : 0 );

         if (fd < 0);
            ReportError();
         endif;

         data = '<?xml version="1.0"?>' + CRLF;
         callp write(fd: %addr(data)+2: %len(data));

         data = '<CustomerList>' + CRLF;
         callp write(fd: %addr(data)+2: %len(data));

         read CUSTMAS;
         dow not %eof(CUSTMAS);

            data =
              '<Customer>' + CRLF
            + '  <CustNum>' + %char(CustNo) + '</CustNum>' + CRLF
            + '  <Company>' + %trimr(Company) + '</Company>' + CRLF
            + '  <Contact>' + %trimr(Name) + '</Contact>' + CRLF
            + '  <Address>' + CRLF
            + '    <AddrLine1>' + %trimr(Address1) + '</AddrLine1>' 
            + CRLF;

            if (Address2 <> *blanks);
               data += '    <AddrLine2>'
                     + %trimr(Address2)
                     + '</AddrLine2>'
                     + CRLF;
            endif;

            data +=
              '    <City>' + %trimr(City) + '</City>' + CRLF
            + '    <State>' + %trimr(State) + '</State>' + CRLF
            + '    <PostalCode>' + Zip +'-'+ Zip4 + '</PostalCode>' 
            + CRLF
            + '  </Address>' + CRLF
            + '</Customer>' + CRLF;

            callp write(fd: %addr(data)+2: %len(data));
		
A
            
            read CUSTMAS;
         enddo;

         data = '</CustomerList>' + CRLF;
         callp write(fd: %addr(data)+2: %len(data));

         callp close(fd);
         *inlr = *on;

      /end-free