2016-11-11 73 views
1

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

它现在是一个有效的XML。你能否提供更有效的样本?它有物品清单吗? – Rao

+0

我已经粘贴了我正在得到的确切结果。没有项目列表。 – rAJ

+0

这显然是错误的,不是一个结构良好的XML。 – Rao

回答

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格式良好的测试,所以改了一下。

希望这是有帮助的。

+0

@RajNegi,很高兴知道答案是有帮助的。 – Rao

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

+0

net.sf.saxon.trans.XPathException:{\ n // *:*}第2行char 5上的XPath语法错误:预计为“”,找到“*” – rAJ