使用 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 格式正确,因此稍微更改一下。

希望对您有所帮助。