如何使用 groovy 获取 xml 值
How to get the xml value using groovy
样本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>
我试过这个:
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()
}
}
它不显示任何结果,它适用于单个节点,但是当存在多个属性时,它不显示任何结果
尝试这样做:
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()}
你可以执行它here(在控制台中编辑 -> 执行脚本 -> 输出)
您只需要访问元素,而不是疯狂的 attributes
事情..
此外,您在解析文件后检查该文件是否存在?
将 XMLDATA
变量重命名为更合理的 xmlData
,这样应该可以工作:
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}"
}
样本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>
我试过这个:
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()
}
}
它不显示任何结果,它适用于单个节点,但是当存在多个属性时,它不显示任何结果
尝试这样做:
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()}
你可以执行它here(在控制台中编辑 -> 执行脚本 -> 输出)
您只需要访问元素,而不是疯狂的 attributes
事情..
此外,您在解析文件后检查该文件是否存在?
将 XMLDATA
变量重命名为更合理的 xmlData
,这样应该可以工作:
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}"
}