2016-11-11 79 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

相關問題