# DOMRECUR This example program demonstrates the basic structure of an RPG program utilizing the RPG-XML Suite DOM parser to parse an XML document with multiple repeating elements. ```rpgle H BNDDIR('RXSBND') DFTACTGRP(*NO) ACTGRP(*CALLER) /copy qrpglecpy,rxscb D gRootDomDS DS LikeDS(RXS_ParseDomDS_t) Inz D gBookDomDS DS LikeDS(RXS_ParseDomDS_t) Inz D gReviewDomDS DS LikeDS(RXS_ParseDomDS_t) Inz D gXml S 65535A Varying(4) D gData S 65535A Varying(4) D gXPath S Like(RXS_Var8Kv_t) D x S 10U 0 D y S 10U 0 /free monitor; gXml = '' + '' + '' + '<![CDATA[Charlotte''s Web]]>' + 'E. B. White' + '1952' + '5.99' + 'What a great book!' + 'Highly recommended.' + '' + '' + 'Everyday Italian' + 'Giada De Laurentiis' + '2005' + '30.00' + '' + '' + 'Gideon the Ninth' + 'Tamsyn Muir' + '2019' + '19.99' + '' + ''; gRootDomDS = RXS_OpenDom( gXml ); gXPath = RXS_XPath( '/*:bookstore/*:book' ); gBookDomDS = RXS_ParseDomToDom( gXPath : gRootDomDS ); for x = 1 to gBookDomDS.NodeCount; gXPath = RXS_XPath( '*:book[%u]/*:title' : x ); gData = RXS_ParseDomToText( gXPath : gBookDomDS ); RXS_JobLog( 'Title: %s' : gData ); gXPath = RXS_XPath( '*:book[%u]/*:review' : x ); gReviewDomDS = RXS_ParseDomToDom( gXPath : gBookDomDS ); for y = 1 to gReviewDomDS.NodeCount; gXPath = RXS_XPath( '*:review[%u]/*:text' : y ); gData = RXS_ParseDomToText( gXPath : gReviewDomDS ); RXS_JobLog( 'Review: %s' : gData ); endfor; endfor; RXS_CloseDom( gRootDomDS ); on-error; endmon; *INLR = *ON; /end-free ```