使用Groovy在字符串中存储多个XML节点值
我正在尝试将XML响应节点值存储到字符串中。 响应:使用Groovy在字符串中存储多个XML节点值
<ReturnResourceItemResponse>
<ReturnResourceItemResult>
<countryID>1</countryID>
<resourceItemID>2000</resourceItemID>
<locationID>88</locationID>
<groupID>518</groupID>
<floor>1</floor>
<resourceID>1</resourceID>
<name>Hello</name>
</ReturnResourceItemResult>
</ReturnResourceItemResponse>
结果,我想:
[2000, Hello, 1, 1, 88, 518, 1]
我想什么:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContent)
def nodes = holder.getDomNodes("//*:countryID")
def XMLlist = []
for(node in nodes)
{
def value = com.eviware.soapui.support.xml.XmlUtils.getNodeValue(node)
XMLlist.add(value)
}
log.info "XML_List =" + XMLlist
结果我得到:
XML_List =[1]
值得注意的是OP为请求步骤中使用Script Assertion
得到节点的所有值。
下面是Script Assertion
,其中断言响应并检索OP请求的数据。
脚本断言
//Retrieves the ReturnResourceItemResult
def getItemResult = { response ->
def parsedResponse = new XmlSlurper().parseText(response)
parsedResponse.'**'.find{it.name() == 'ReturnResourceItemResult' }
}
//Retrieves the data from Item result
def getItemResultData = { itemResult, elements ->
def result = []
elements.each { element ->
result << itemResult.'**'.find{it.name() == element} as String
}
result
}
//Assert if result is not empty or null
assert context.response, "Response data is empty or null"
//Defining the element order will have the better control on result order
def list = ['resourceItemID', 'name', 'countryID', 'resourceID', 'locationID', 'groupID', 'floor']
//Jus call the above closures to get the data
def data = getItemResultData(getItemResult(context.response), list)
//Show the result
log.info "Extracted data is :${data}"
您可以快速地从这里Demo
需要注意的是,要做出的XML格式良好的测试,所以改了一下。
希望这是有帮助的。
@RajNegi,很高兴知道答案是有帮助的。 – Rao
与更换countryId *
`
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(messageExchange.responseContent)
def nodes = holder.getDomNodes("//*:*")
def XMLlist = []
for(node in nodes)
{
def value = com.eviware.soapui.support.xml.XmlUtils.getNodeValue(node)
XMLlist.add(value)
}
log.info "XML_List =" + XMLlist
`
,或者您可以使用
def nodes = holder.getNodeValues("//*:*")
net.sf.saxon.trans.XPathException:{\ n // *:*}第2行char 5上的XPath语法错误:预计为“
它现在是一个有效的XML。你能否提供更有效的样本?它有物品清单吗? – Rao
我已经粘贴了我正在得到的确切结果。没有项目列表。 – rAJ
这显然是错误的,不是一个结构良好的XML。 – Rao