# CELSIUSDOM This example program demonstrates the basic structure of an RPG program utilizing RPG-XML Suite to compose an XML request, call a remote web service, and parse the response XML with the DOM parser. ```rpgle H DEBUG(*YES) DFTACTGRP(*NO) BNDDIR('RXSBND') ACTGRP(*CALLER) /copy QRPGLECPY,RXSCB /copy QRPGLETPL,CELSIUS D Template PR D p Like(RXS_TEMPLATE_PARM) D gData S Like(RXS_Var1Kv_t) D gCelsius S 10I 0 D gFahrenheit S 10I 0 D gXmlRequest S Like(RXS_Var64Kv_t) D gXmlResponse S Like(RXS_Var64Kv_t) D gXPath S Like(RXS_Var8Kv_t) D ComposeDS DS LikeDS(RXS_ComposeDS_t) D TransmitDS DS LikeDS(RXS_TransmitDS_t) D RootDomDS DS LikeDS(RXS_ParseDOMDS_t) D ErrorDS DS LikeDS(RXS_CatchThrowErrorDS_t) /free monitor; gFahrenheit = 100; exsr compose; exsr transmit; exsr parse; RXS_ResetDS( ErrorDS : RXS_DS_TYPE_CATCHTHROWERROR ); ErrorDS.MessageId = 'RXS9897'; ErrorDS.MessageData = 'Celsius Temp: ' + %trim ( %editc( gCelsius : '3' ) + '°'); ErrorDS.ThrowToCaller = RXS_YES; RXS_Throw( ErrorDS ); on-error; endmon; *Inlr = *On; begsr compose; RXS_ResetDS( ComposeDS : RXS_DS_TYPE_COMPOSE ); ComposeDS.TemplateProcedure = %Paddr( Template ); RXS_StartComposeEngine( ComposeDS ); RXS_ComposeVariable( fahrenheit : %Char(gFahrenheit) ); RXS_ComposeSection( content ); gXmlRequest = RXS_GetComposeBuffer(); endsr; begsr transmit; RXS_ResetDS( TransmitDS : RXS_DS_TYPE_TRANSMIT ); TransmitDS.URI = 'http://www.w3schools.com/xml/tempconvert.asmx'; TransmitDS.HeaderSOAPAction = '"http://www.w3schools.com/xml/FahrenheitToCelsius"'; TransmitDS.LogFile = '/tmp/celsius.txt'; TransmitDS.HeaderContentType = 'text/xml; charset=utf-8'; TransmitDS.RequestCcsid = RXS_CCSID_UTF8; gXmlResponse = RXS_Transmit( gXmlRequest : TransmitDS ); endsr; begsr parse; RootDomDS = RXS_OpenDom( gXmlResponse ); gXPath = RXS_XPath('/*:Envelope/*:Body/*:FahrenheitToCelsiusResponse' + '/*:FahrenheitToCelsiusResult' ); gData = RXS_ParseDomToText( gXPath : RootDomDS ); RXS_CloseDom( RootDomDS ); gCelsius = %Int( gData ); endsr; /end-free P Template B D PI D p Like(RXS_TEMPLATE_PARM) // Template RPG source was created from the actual template // STMF using the following command: // CRTRPGTPL STMF('/www/rxs/templates/geturi2.tpl') // FILE(RXS3/QRPGLETPL) MBR(CELSIUS) // The RPG Template source is copied from QRPGLETPL by using // /copy once in the D-specs and again below. /copy QRPGLETPL,CELSIUS P E ```