使用 Groovy 在字符串中存储多个 XML 节点值
Store multiple XML node values in string using 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]
将 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( "//*:*" )
注意到 OP 在请求步骤中使用 Script Assertion
。
这是断言响应并检索 OP 请求的数据的 Script Assertion
。
脚本断言
//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 格式正确,因此稍微更改一下。
希望对您有所帮助。
我正在尝试将 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]
将 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( "//*:*" )
注意到 OP 在请求步骤中使用 Script Assertion
。
这是断言响应并检索 OP 请求的数据的 Script Assertion
。
脚本断言
//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 格式正确,因此稍微更改一下。
希望对您有所帮助。