帮助grails地图

时间:2011-08-27 15:10:44

标签: java grails grails-controller

我正在尝试动态创建一个地图集,但我仍然是grails的新手,并希望有人可以帮助我。我想要做的是解析和xml文件并将值添加到地图。我已经解析了,但只是不知道如何动态地将节点值添加到地图。这是我到目前为止所拥有的:

示例xml stream:

<?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 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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]

这样,我就可以将它传递到我的groovy页面并迭代数组