собирать атрибуты и значения в список строк

У меня есть данные xml, выглядящие так:

<persons>
  <person key="M">John Doe</person>
  <person key="N">Jane Doe</person>
</persons>

Я хочу собрать их в список карт типа

[[key: M, name: John Doe], [key: N, name: Jane Doe]]

и я использую, после того, как захлебнул данные в переменную 'p', используя XmlSlurper:

p.collect { [key: [email protected](), name it.text()] }

но я получаю

[[key: MN, name: John DoeJane Doe]]

Очевидно, я делаю что-то очень неправильно, но я не могу понять, что. Я пробовал несколько методов, но получаю тот же ответ.


person serafim    schedule 26.08.2014    source источник


Ответы (1)


Попробуйте найти children() из корневого узла.

def xml = """
<persons>
  <person key="M">John Doe</person>
  <person key="N">Jane Doe</person>
</persons>
"""

def slurper = new XmlSlurper().parseText( xml )

assert [
    [key:'M', name:'John Doe'], 
    [key:'N', name:'Jane Doe']
] == slurper.children().collect { 
    [ key: [email protected](), name: it.text() ] 
}
person dmahapatro    schedule 26.08.2014
comment
Это решило это И пару дополнительных вопросов. Stackoveflow оказался более информативным, чем вся документация, которую я читал. - person serafim; 26.08.2014