ayuda con el mapa de griales

Estoy tratando de crear dinámicamente una colección de mapas, pero todavía soy nuevo en Grails y esperaba que alguien pudiera ayudarme. Lo que quiero hacer es analizar un archivo xml y agregar los valores a un mapa. Tengo el análisis, pero no sé cómo agregar dinámicamente los valores de los nodos al mapa. esto es lo que tengo hasta ahora:

ejemplo de flujo 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>

Luego lo analizo así:

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

Entonces, esto me permite iterar y analizar el flujo xml. mi pregunta es, si quisiera agregar los valores, dinámicamente, a un mapa como este:

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

¿cómo haría esto?

Gracias jason

preguntado el 27 de agosto de 11 a las 15:08

2 Respuestas

Si no conoce los nombres de los nodos secundarios y desea usarlos como claves en el mapa, use esto:

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

Esto resultará en [id: '123245', 'first-name': 'me', 'last-name': 'you']

No relacionado: puede acortar su código de depuración con un GString:

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

Respondido 27 ago 11, 20:08

Gracias por su respuesta. Debería haber dicho que, en mi ejemplo xml, hay varias filas de datos. el ejemplo que proporcionó parece funcionar, pero solo parece obtener la última fila. ¿Cómo almaceno todos los registros en el mapa? Gracias - Jason

¿Puede proporcionar un ejemplo actualizado que demuestre varias filas de datos? - Matt Lachman

bueno, terminé usando una matriz multidimensional, y eso parece haber funcionado bien. De nuevo, gracias por tu ayuda

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]

De esta manera, pude pasarlo a mi página maravillosa e iterar sobre la matriz

Respondido 28 ago 11, 03:08

hazlo de la manera maravillosa: def friends = [:]; friends[i] = [:]; friends[i][0] = conName.'id'.toString() - Chris

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.