Reputation: 75
Sample XML:
<msgs>
<msg>
<type>sense</type>
<cid>168</cid>
<ip>192.168.140.150</ip>
<errs/>
<id>002EC0FEFF83EA97</id>
<sensors>
<sensor sid='002EC0FEFF8FFF27' desc='' batt='6.60' sig='-55' scount='0' rdate='15/05/2015 21:47:04' mdate='18/04/2016 08:06:25' />
<sensor sid='002EC0FEFF8FFF27' desc='' batt='6.60' sig='-55' scount='0' rdate='15/05/2015 21:47:04' mdate='18/04/2016 08:07:25' />
<sensor sid='002EC0FEFF8FFF27' desc='' batt='6.60' sig='-55' scount='0' rdate='15/05/2015 21:47:04' mdate='18/04/2016 08:08:25' />
</sensors>
</msg>
</msgs>
I tried this:
def alert = com.eviware.soapui.support.UISupport;
//Define a file pointer for groovy to handle the file operations.
def inputFile = new File("C:\\Users\\Desktop\\New.xml")
def XMLDATA = new XmlParser().parse(inputFile)
if(!inputFile.exists())
{
//Display an alert if the file is not found.
alert.showInfoMessage("Input File 'New.xml' not found!");
}
else
{
//Read and parse XML file and store it into a variable
println "ATT1 = ${XMLDATA.attribute("type")}"
println "ATT2 = ${XMLDATA.attribute("cid")}"
println "ATT3 = ${XMLDATA.attribute("ip")}"
println "ATT4 = ${XMLDATA.attribute("id")}"
log.info
println "ATT5 = ${XMLDATA.attribute("sensors/sensor sid")}"
XMLDATA.sensors.each{
println it.text()
}
}
It is not display any result, it works for the single node but when the multiple attributes are there then it is not display any results
Upvotes: 0
Views: 5764
Reputation: 2555
Try to do it this way:
println "ATT1 = ${XMLDATA.msg.type[0].text()}"
println "ATT2 = ${XMLDATA.msg.cid[0].text()}"
println "ATT3 = ${XMLDATA.msg.ip[0].text()}"
println "ATT4 = ${XMLDATA.msg.id[0].text()}"
println XMLDATA.msg.sensors.sensor[0]['@sid'].flatten()
println "ATT5 = ${XMLDATA.msg.sensors.sensor['@sid'].flatten()}"
XMLDATA.msg.sensors.sensor.each{println it['@sid'].flatten()}
you can execute it here (Edit in console ->Execute script -> Output)
Upvotes: 1
Reputation: 171194
You just need to access the elements, not the crazy attributes
thing..
Also, you check the file exists AFTER you parse it?
Renaming the XMLDATA
variable to a more sensible xmlData
, then this should work:
println "ATT1 = ${xmlData.msg.type.text()}"
println "ATT2 = ${xmlData.msg.cid.text()}"
println "ATT3 = ${xmlData.msg.ip.text()}"
println "ATT4 = ${xmlData.msg.id.text()}"
xmlData.msg.sensors.sensor.each {
println "ATT5 = ${it.@sid}"
}
Upvotes: 0