2011-06-15 12 views
1

我正在開發一個應用程序,它從Last.fm API中提取有關音樂事件的信息。 但是,出於某種原因,應用程序僅解析XML文件中的前兩個事件,我無法弄清楚原因。任何幫助?用grails解析XML的問題

這是代碼:

def resultList = [] 

    if(connection.responseCode == 200){ 
     def xml = connection.content.text 
     def lfm = new XmlSlurper().parseText(xml) 
     lfm.events.event.each { 
      def result = [:] 
      result.eventId = it.id as String 
      result.eventTitle = lfm.events.event.find { it.'id' == result.eventId }.title as String 

      resultList << result 

     } 
+0

我剛剛意識到問題可能在Controller類中,而不是在XML解析中。它會產生以下異常:「處理請求時發生異常:[POST]/events/event/save - parameters:artist:artist create:Create」。有任何想法嗎?謝謝 – 2011-06-15 17:28:48

+0

你能發表更多的代碼嗎?控制器操作和任何方法調用您發佈的代碼片段就足夠了。 – 2011-06-15 23:36:09

回答

0

我剛剛發現的bug是在保存{}封閉Controller類的。以下是錯誤代碼:

def save = { 
    resultsList.each{ 
     def eventInstance = new Event(params + it) 
     if (eventInstance.save(flush: true)) { 
      flash.message = "${message(code: 'default.created.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.id])}" 
      redirect(action: "show", id: eventInstanceID) 
     } 
     else { 
      render(view: "create", model: [eventInstance: eventInstance]) 
     } 
    } 
} 

所以,問題是,我是重定向每個{}封閉的內部動作「秀」。出於某種原因,我仍然不確定,它在每個循環的第二次迭代之後拋出異常。因此,所有我所要做的就是調用重定向方法的每個{}封閉外,像這樣:

def save = { 
    def resultsList = eventService.lastFmVenues(params.artist) 
    def eventInstanceID 
    resultsList.each{ 
     def eventInstance = new Event(params + it) 
     if (eventInstance.save(flush: true)) { 
      flash.message = "${message(code: 'default.created.message', args: [message(code: 'event.label', default: 'Event'), eventInstance.id])}" 
      eventInstanceID = eventInstance.id 
     } 
     else { 
      render(view: "create", model: [eventInstance: eventInstance]) 
     } 
    } 
    redirect(action: "show", id: eventInstanceID) 
} 

我仍然好奇,爲什麼它只是第二次迭代後拋出異常,但不管怎麼說,問題解決了。謝謝!