【问题标题】:help with grails map帮助 grails 地图
【发布时间】:2011-08-27 15:10:43
【问题描述】:

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

示例 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]

我该怎么做?

谢谢 杰森

【问题讨论】:

    标签: java grails grails-controller


    【解决方案1】:

    如果您不知道子节点名称并想将它们用作映射中的键,请使用:

    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"
    

    【讨论】:

    • 感谢您的回复。我应该说,在我的 xml 示例中,有多行数据。您提供的示例似乎有效,但似乎只获得了最后一行。我如何将所有记录存储在地图中?谢谢
    • 您能否提供一个更新的示例来演示多行数据?
    【解决方案2】:

    好吧,我最终只使用了一个多维数组,这似乎工作得很好。再次感谢您的帮助

    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 页面并遍历数组

    【讨论】:

    • 用时髦的方式来做:def friends = [:]; friends[i] = [:]; friends[i][0] = conName.'id'.toString()
    猜你喜欢
    • 1970-01-01
    • 2011-09-12
    • 2010-10-28
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2011-01-16
    相关资源
    最近更新 更多