Странно ... если я сделаю это (с Groovy 1.8)
def gpathResult = new XmlSlurper().parseText( $/<client productname="abp">
<machine>
<env>
<variable name='ALLUSERSPROFILE' value='C:\Documents and Settings\All Users' />
<variable name='APPDATA' value='C:\Documents and Settings\Administrator\Application Data' />
<variable name='OS' value='Windows_NT' />
<variable name='COMPUTERNAME' value='AbhishekPC' />
</env>
<osinfo>
<osinfo field='OS Name' information='Microsoft(R) Windows(R) Server 2003 Enterprise x64 Edition' />
<osinfo field='OS Version' information='5.2.3790 Service Pack 2 Build 3790' />
<osinfo field='OS Manufacturer' information='Microsoft Corporation' />
<osinfo field='OS Configuration' information='Standalone Server' />
<osinfo field='OS Build Type' information='Multiprocessor Free' />
</osinfo>
</machine>
</client>/$ )
println "HI 1 ${gpathResult.machine.env.variable.@name*.text()}"
println "HI 2 ${gpathResult.machine.osinfo.osinfo.@field*.text()}"
он напечатает:
HI 1 [ALLUSERSPROFILE, APPDATA, OS, COMPUTERNAME]
HI 2 [OS Name, OS Version, OS Manufacturer, OS Configuration, OS Build Type]
Можете ли вы попробовать этот код (если вы используете 1.8,последняя версия Groovy - если нет, вам нужно будет использовать """
вместо $/
для разделителей строк и экранировать символы \
)
[edit] Это, вероятно, только потому, что вывы используете gpathResult.machine.environment.variable
вместо gpathResult.machine.env.variable
для обхода узлов env, вы должны сделать что-то вроде:
gpathResult.machine.env.variable.each { node ->
println "${node.@name.text()} contains ${node.@value.text()}"
}