2013-04-12 162 views
0

我打電話這樣的Web服務(使用rest插件):使用Web服務

withRest(uri: "http://server.com") { 
    def response = post(path: '/webservice', query: [q: 'test']) 
    // process response 
} 

並得到如下回應:

<?xml version="1.0" encoding="UTF-8" ?> 
<RESPONSE> 
    <MULTIPLE> 
     <SINGLE> 
      <KEY name="id"> 
       <VALUE>1</VALUE> 
      </KEY> 
      <KEY name="courseid"> 
       <VALUE>1</VALUE> 
      </KEY> 
      <KEY name="name"> 
       <VALUE>test</VALUE> 
      </KEY> 
      <KEY name="description"> 
       <VALUE>Test</VALUE> 
      </KEY> 
      <KEY name="descriptionformat"> 
       <VALUE>1</VALUE> 
      </KEY> 
      <KEY name="enrolmentkey"> 
       <VALUE>TEST</VALUE> 
      </KEY> 
     </SINGLE> 
    </MULTIPLE> 
</RESPONSE> 

我想這個響應轉換一個對象,以便我可以這樣做:

assert responseMap.id == 1 

我知道如何做到這一點的唯一方法是使用Gpath expressio ns在上面的// process request塊中獲取單個條目並構建我的responseMap。有沒有更簡單的方法?這種迴應是否遵循某些「標準」,並且有使我的工作更輕鬆的功能?

回答

4

你可以這樣做:

new XmlSlurper().parseText(response) 
       .MULTIPLE.SINGLE.KEY 
       .find { [email protected] == 'id' } 
       .VALUE.text() == '1' 

要檢查KEY標籤與name="id"VALUE1