Is the XML the result of a REST test step? If so can you use the point and click Get Data functionality, from where you need the data?
If you need to use Groovy (I would always recommend using out of the box functionality before resorting to Groovy script) then the following is an example of how to use the XML Slurper to extract data, this should answer points 1 & 2, plus give a couple more examples. This is a stand alone example that can be pasted into an empty Groovy Script test step and run:
def xmlText = '''\
<body>
<parent>
<id>111</id>
<property>
<name>111</name>
<info>...</info>
</property>
</parent>
<children>
<properties>
<property>
<id>112</id>
<name>112</name>
<info>...</info>
</property>
<property>
<id>113</id>
<name>113</name>
<info>...</info>
</property>
<property>
<id>114</id>
<name>114</name>
<info>...</info>
</property>l
</properties>
</children>
</body>'''
import groovy.util.XmlSlurper
def body = new XmlSlurper().parseText(xmlText)
// Log the parent id
log.info('Parent ID = ' + body.parent.id)
// Log the first child id
log.info('First (index zero) child ID = ' + body.children.properties.property[0].id)
// Log all child ids
body.children.properties.property.each(){ prop ->
log.info('Child id = ' + prop.id)
}
// Log all child ids with index
body.children.properties.property.eachWithIndex(){ prop, idx ->
log.info('ID of child at index ' + idx + ' = ' + prop.id)
}
// Log the child id whose name is "113"
def namedProp = body.children.properties.'*'.find {prop -> prop.name=='112'}
log.info('namedProp ID = ' + namedProp.id)
Regarding your 3rd question, sorry I'll have to leave that to someone else.