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"
}
]
}