Here is an example of updating XML using XmlParser:
// require(groupId:'xmlunit', artifactId:'xmlunit', version:'1.1') import org.custommonkey.xmlunit.Diff import org.custommonkey.xmlunit.XMLUnit def input = ''' <shopping> <category type="groceries"> <item>Chocolate</item> <item>Coffee</item> </category> <category type="supplies"> <item>Paper</item> <item quantity="4">Pens</item> </category> <category type="present"> <item when="Aug 10">Kathryn's Birthday</item> </category> </shopping> ''' def expectedResult = ''' <shopping> <category type="groceries"> <item>Luxury Chocolate</item> <item>Luxury Coffee</item> </category> <category type="supplies"> <item>Paper</item> <item quantity="6" when="Urgent">Pens</item> </category> <category type="present"> <item>Mum's Birthday</item> <item when="Oct 15">Monica's Birthday</item> </category> </shopping> ''' def root = new XmlParser().parseText(input) // modify groceries: quality items please def groceries = root.category.findAll{ it.@type == 'groceries' }.item[0] groceries.each { g -> g.value = 'Luxury ' + g.text() } // modify supplies: we need extra pens def supplies = root.category.findAll{ it.@type == 'supplies' }.item[0] supplies.findAll{ it.text() == 'Pens' }.each { s -> s.@quantity = s.@quantity.toInteger() + 2 s.@when = 'Urgent' } // modify presents: August has come and gone def presentCategory = root.category.find{ it.@type == 'present' } presentCategory.children().clear() presentCategory.appendNode('item', "Mum's Birthday") presentCategory.appendNode('item', [when:'Oct 15'], "Monica's Birthday") // check the when attributes def removeNulls(list) { list.grep{it} } assert removeNulls(root.'**'.item.@when) == ["Urgent", "Oct 15"] // check the whole document using XmlUnit def writer = new StringWriter() new XmlNodePrinter(new PrintWriter(writer)).print(root) def result = writer.toString() XMLUnit.setIgnoreWhitespace(true) def xmlDiff = new Diff(result, expectedResult) assert xmlDiff.identical()