2016-10-20 2 views
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([email protected], 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'] 

나는 거의 하루 동안 위의 코드에 짜증이났다. 왜 나는지도 [ 'ust1twastool01a']로 가치를 얻을 수 없는지 이해할 수 없습니다.그루비의 키로지도에서 값 검색

콘솔에서 스크린 샷을 첨부했는데지도가 비어 있지만 키로 값을 가져올 수 없음을 보여줍니다. 이 enter image description here

답변

2

를 사용하여 다음과 같이 값으로 키와 문자열 목록을지도 할 수있는 유사한 구조가 같은 MAP2는 그룹을 제어한다 : 보조 노트에

map.put([email protected](), list) 

를, 난 당신이 코드를 단순화 할 수 있다고 생각합니다 단지 :

def xml = new XmlSlurper().parseText(text) 
def map = xml.Kits.Kit.collectEntries { node -> 
    [ [email protected](), node.Backup.collect() ] 
} 
+1

덕분에 @dmahapatro, 내 생명을 구했어. 오늘 밤 좋은 잠을 잘 수 있었어. – user1888955