2011-08-27 57 views
0

我想動態地創建一個地圖集合,但我仍然是新來的grails,並希望有人能幫助我。我想要做的是解析和XML文件,並將值添加到地圖。我已經解析了,但不知道如何動態地將節點值添加到地圖。這是我到目前爲止有:幫助grails地圖

例如XML流:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<person> 
    <connections total="29"> 
     <person> 
     <id>123245</id> 
     <first-name>me</first-name> 
     <last-name>you</last-name>   
     </person> 
    </connections> 
</person> 

我再分析它是這樣的:

def alum = new XmlSlurper().parseText(xmlResponse) 
    alum.connections.person.each{ conName -> 
print conName.'id'.toString() + " " + conName.'first-name'.toString() + " " + conName.'last-name'.toString() + "\n" 
    } 

所以,這讓我來遍歷和解析,XML流。我的問題是,如果我想動態地將值添加到像這樣的地圖:

def myMap= [fName:"SomeName", lName:"Sme last Name", id:1234] 

我該怎麼做?

謝謝 傑森

回答

2

如果你不知道孩子節點名稱和要使用它們作爲映射中的鍵,使用此:

def alum = new XmlSlurper().parseText(xmlResponse) 
alum.connections.person.each { conName -> 
    def myMap = [:] 
    conName.children().each { child -> myMap[child.name()] = child.text() } 
} 

這將導致[id: '123245', 'first-name': 'me', 'last-name': 'you']

無關:您可以縮短您的調試代碼用的GString:

print "${conName.'id'} ${conName.'first-name'} ${conName.'last-name'}\n" 
+0

感謝您的答覆。我應該說,在我的xml示例中,有多行數據。你提供的例子似乎有效,但它似乎只能得到最後一行。我如何存儲地圖中的所有記錄?謝謝 – jason

+0

你能否提供一個演示多行數據的更新示例? –

0

好吧,我結束了剛剛使用一個多維數組,這似乎工作得很好。再次感謝您的幫助

int i=0 
String[][] friends = new String[test][4] 
alum.connections.person.each{ conName -> 
friends[i][0] =conName.'id'.toString() 
friends[i][1] =conName.'first-name'.toString() 
friends[i][2] =conName.'last-name'.toString() 
friends[i][3] =conName.'picture-url'.toString() 
i++ 
} 
[Friends:friends] 

這種方式,我能夠把它傳給我的常規頁面,並遍歷數組

+0

這樣做的常規方式:'def friends = [:];朋友[i] = [:];朋友[我] [0] = conName.'id'.toString()' – Chris