循环遍历两个XML列表

时间:2014-09-04 17:34:57

标签: java xml groovy

我的回复如下,其中包含两个列表。第一个列表是 FILE_SET ,第二个列表是 FILE_LIST 。我想循环并返回第二个列表 FILE_LIST 。我尝试使用下面的代码执行此操作,但它只返回第一个列表 FILE_SET 。我如何在groovy或java循环中返回第二个列表?

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
            }
        }

1 个答案:

答案 0 :(得分:0)

缺少节点中的下划线&#39;名称,没有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'