Reading XML is easy with Groovy's XmlParser, XmlSlurper classes. But sometimes we get an XML structure as DOM from another application or Java component. So we need more low-level access at the DOM level: we are in a world of nodes and elements. We can use the DOMCategory to make the low-level handling more Groovy.
import groovy.xml.*
import groovy.xml.dom.*
def xml = '''
<users>
<user active="true">
<fullname>mrhaki</fullname>
</user>
<user active="false">
<fullname>Hubert A. Klein Ikkink</fullname>
</user>
</users>
'''
def xmlDom = DOMBuilder.newInstance().parseText(xml) // Create DOM structure.
def root = xmlDom.documentElement
use (DOMCategory) {
def users = root.user
assert 2 == users.size()
assert 'User with fullname mrhaki is active' == userInfo(users[0])
assert 'User with fullname Hubert A. Klein Ikkink is not active' == userInfo(users[1])
assert 'mrhaki' == users.findAll { it.'@active'.toBoolean() }[0].fullname.text()
}
def userInfo(user) {
def active = user.'@active'.toBoolean()
def fullname = user.fullname.text()
"User with fullname $fullname is ${active ? 'active' : 'not active'}"
}