создать карту из scala.xml.NodeSeq - PullRequest
3 голосов
/ 14 января 2011

У меня есть следующий xml-узел:

val xml = <fields><field name="one"></field><field name="two"></field></fields>

Теперь я хотел бы создать карту [String, Node] с именем поля в качестве ключа.

for{x <- xml \ "field"} yield Map(x \ "@name" -> x)

Используя приведенный выше выход, я получаю список карт:

List(Map((one,<field name="one"></field>)), Map((two,<field name="two"></field>))) 

Как мне получить Карту [String, Node] функционально, не используя императивный способ (временные переменные) для преобразования Карт в Списке в конечную желаемую Карту, возможно, без выхода?

Ответы [ 3 ]

5 голосов
/ 14 января 2011
  xml \ "field" map { x => ((x \ "@name").text -> x) } toMap
4 голосов
/ 14 января 2011

Я думаю, что есть еще более простой способ сделать это, но

(for{x <- xml \ "field"} yield (x \ "@name", x)).toMap

должно работать.Вы в основном получаете последовательность кортежей и впоследствии конвертируете ее в карту.

2 голосов
/ 14 января 2011

Оба опубликованных ответа дают карту, но для получения карты [String, Node] вы должны вызвать (x \ "@name").text, чтобы получить значение атрибута.

...