2014-09-04 468 views
0

我有如下的響應,其中包含兩個列表。第一個列表是FILE_SET第二個列表是FILE_LIST。我想循環並返回第二個列表 FILE_LIST。我試圖用下面的代碼做到這一點,但它只返回第一個列表FILE_SET。我怎麼能在groovy或Java循環,並返回第二個列表?循環遍歷兩個XML列表

XML響應

<FILE_SET_LIST> 
    <FILE_SET> 
     <FILE_LIST> 
      <FILE> 
       <DATETIME>2013-06-07T00:00:00+02:00</DATETIME> 
       <FILE_ID>W123</FILE_ID> 
       <FILE_TYPE>Doc</FILE_TYPE> 
       </FILE> 
      <FILE> 
       <DATETIME>2013-06-07T00:00:00+02:00</DATETIME> 
       <FILE_ID>W125</FILE_ID> 
       <FILE_TYPE>Letter</FILE_TYPE> 
      </FILE> 
     </FILE_LIST> 
    </FILE_SET> 
</FILE_SET_LIST> 

我的代碼

response.FILESETLIST?.FILESETS?.collect() { 

      it.FILELIST?.FILES?.collect() { 
       FILE file = new FILE() 

       file.FileId = it.FILEID 
       file.Date = it.CREATIONDATETIME 
       file.FileType = it.FILETYPE 

       file 
      } 
     } 
+0

下面是一個例子:http://groovyconsole.appspot.com/script/5736754531270656 – 2014-09-04 17:43:50

回答

0

它缺少的節點的名字下劃線並沒有FILE類。您可以從每個FILE元素收集地圖:

xml = '''<FILE_SET_LIST> 
    <FILE_SET> 
     <FILE_LIST> 
      <FILE> 
       <DATETIME>2013-06-07T00:00:00+02:00</DATETIME> 
       <FILE_ID>W123</FILE_ID> 
       <FILE_TYPE>Doc</FILE_TYPE> 
      </FILE> 
      <FILE> 
       <DATETIME>2013-06-07T00:00:00+02:00</DATETIME> 
       <FILE_ID>W125</FILE_ID> 
       <FILE_TYPE>Letter</FILE_TYPE> 
      </FILE> 
     </FILE_LIST> 
    </FILE_SET> 
</FILE_SET_LIST>''' 

response = new XmlSlurper().parseText xml 

files = response.FILE_SET.FILE_LIST.FILE.collect { file -> 
    return [ 
    fileType: file.FILE_TYPE, 
    fileId: file.FILE_ID, 
    dateTime: file.DATETIME 
    ] 
} 

assert files.size() == 2 
assert files[0].fileType == 'Doc' 
assert files[1].fileId == 'W125' 
+0

由於它的作品! – mesut 2014-09-05 14:03:29

+0

@mesut,如果這個答案解決了你的問題,你應該接受它作爲正確答案 – Will 2014-09-07 21:31:42