2016-10-20 3 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'] 

Je suis agacé par le code ci-dessus pour presque toute la journée. Je ne comprends pas pourquoi je ne peux pas obtenir de valeur par carte ['ust1twastool01a'].Récupérer la valeur sur la carte par clé dans Groovy

J'ai attaché une capture d'écran à partir d'une console, cela montre que la carte n'est pas vide mais ne peut tout simplement pas obtenir sa valeur par clé. map2 est le contrôle tout groupe comme il a la structure similaire à la carte chaîne comme clé et la liste en tant que valeur enter image description here

Répondre

2

Utilisation comme ci-dessous:

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

Sur une note côté, je crois que vous pouvez simplifier le code juste :

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

merci @dmahapatro, sauvé ma vie. Pourrait avoir un bon sommeil ce soir – user1888955