使用Groovy将多个XML节点值存储在字符串中

时间:2016-11-11 05:19:20

标签: xml groovy soapui

我正在尝试将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]

2 个答案:

答案 0 :(得分:2)

注意到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格式良好,所以改了一下。

希望这有用。

答案 1 :(得分:0)

将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( "//*:*" )