0
def text= '''<Rollback>  <Kits>
<Kit ServerName='ust1twastool01a'>
  <Backup>2016-10-18_20_34-46-_server-21.000.409_client-21.000.407.zip</Backup>
  <Backup>2016-10-18_21_57-33-_server-21.000.409_client-21.000.407.zip</Backup>
  <Backup>2016-10-19_02_40-03-_server-21.000.413_client-21.000.407.zip</Backup>
  <Backup>2016-10-19_13_58-36-_server-21.000.413_client-21.000.407.zip</Backup>
  <Backup>2016-10-20_03_14-34-_server-21.000.413_client-21.000.407.zip</Backup>
</Kit>
<Kit ServerName='another_server'>
  <Backup>123123.zip</Backup>
  <Backup>321321.zip</Backup>
</Kit>
</Kits></Rollback>'''


def xml = new XmlSlurper().parseText(text)
def map = [:]
i = 0
xml.Kits.Kit.each{node->
    def list = []
    node.Backup.each{kit->
    list.add(kit)
}
map.put(node.@ServerName, list)
}

print map // print map with all keys and values

// Somehow, it's not working ...
print map['ust1twastool01a']

def map2 = ['1':["abc","123"], '2':["bcd", "456"]]
print map2['1']

ほぼ 1 日、上記のコードに悩まされていました。map['ust1twastool01a'] で値を取得できない理由がわかりません。

コンソールからスクリーンショットを添付しました。マップが空ではなく、キーで値を取得できないことを示しています。map2 は、文字列をキーとしてマップし、リストを値としてマップするのと同様の構造を持っているため、単なるコントロール グループです。ここに画像の説明を入力

4

1 に答える 1

2

以下のように使用します。

map.put(node.@ServerName.text(), list)

余談ですが、コードを次のように単純化できると思います。

def xml = new XmlSlurper().parseText(text)
def map = xml.Kits.Kit.collectEntries { node -> 
    [ node.@ServerName.text(), node.Backup.collect() ] 
}
于 2016-10-20T18:48:10.147 に答える