def xml = """<Results> <ResultSet fetchSize="10"> <Row rowNumber="1"> <ORDERID>H001</ORDERID> <LINEID>L001</LINEID> <HOLDID>1</HOLDID> <HOLDNAME>HOLDA</HOLDNAME> <RELEASED_FLAG>N</RELEASED_FLAG> </Row> <Row rowNumber="2"> <ORDERID>H001</ORDERID> <LINEID>L001</LINEID> <HOLDID>2</HOLDID> <HOLDNAME>HOLDB</HOLDNAME> <RELEASED_FLAG>N</RELEASED_FLAG> </Row> <Row rowNumber="3"> <ORDERID>H001</ORDERID> <LINEID>3</LINEID> <HOLDID>3</HOLDID> <HOLDNAME>HOLDC</HOLDNAME> <RELEASED_FLAG>N</RELEASED_FLAG> </Row> </ResultSet> </Results>""" def parsed = new XmlSlurper().parseText(xml) def map = ['requestPayload' : parsed.'**'.findAll{it.name() == 'Row'} .collect { element -> element.children().breadthFirst()*.name() .findAll { !element."$it".children().size() } .collectEntries { [(element."$it".name()): element."$it".text()] } } ] println new groovy.json.JsonBuilder(map).toPrettyString()
Standard input is empty
{ "requestPayload": [ { "ORDERID": "H001", "LINEID": "L001", "HOLDID": "1", "HOLDNAME": "HOLDA", "RELEASED_FLAG": "N" }, { "ORDERID": "H001", "LINEID": "L001", "HOLDID": "2", "HOLDNAME": "HOLDB", "RELEASED_FLAG": "N" }, { "ORDERID": "H001", "LINEID": "3", "HOLDID": "3", "HOLDNAME": "HOLDC", "RELEASED_FLAG": "N" } ] }