0

マップ コレクションを動的に作成しようとしていますが、まだ 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]

どうすればいいですか?

ありがとうジェイソン

4

2 に答える 2

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"
于 2011-08-27T16:19:18.800 に答える
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]

このようにして、それをグルーヴィーなページに渡し、配列を反復処理することができました

于 2011-08-27T23:16:35.937 に答える