Here is an example of updating XML using DOMCategory:

@Grab('xmlunit:xmlunit:1.3')
import groovy.xml.XmlUtil
import groovy.xml.dom.DOMCategory
import groovy.xml.DOMBuilder
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 reader  = new StringReader(input)
def doc     = DOMBuilder.parse(reader)
def root    = doc.documentElement

use(DOMCategory) {
    // modify groceries: quality items please
    def groceries = root.category.findAll{ it.'@type' == 'groceries' }[0].item
    groceries.each { g ->
        g.value = 'Luxury ' + g.text()
    }

    // modify supplies: we need extra pens
    def supplies = root.category.findAll{ it.'@type' == 'supplies' }[0].item
    supplies.findAll{ it.text() == 'Pens' }.each { s ->
        s['@quantity'] = s.'@quantity'.toInteger() + 2
        s['@when'] = 'Urgent'
    }

    // modify presents: August has come and gone
    def presents = root.category.find{ it.'@type' == 'present' }
    presents.item.each {
        presents.removeChild(it)
    }
    presents.appendNode('item', "Mum's Birthday")
    presents.appendNode('item', [when:'Oct 15'], "Monica's Birthday")

    // check the when attributes
    assert root.'**'.item.'@when'.grep{it} == [ "Urgent", "Oct 15" ]
}

// check the whole document using XmlUnit
XMLUnit.setIgnoreWhitespace(true)
def result = XmlUtil.serialize(root)
def xmlDiff = new Diff(result, expectedResult)
assert xmlDiff.identical()