создать карту из scala.xml.NodeSeq

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

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

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

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

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

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

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


person trajectory    schedule 14.01.2011    source источник


Ответы (3)


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

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

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

person soc    schedule 14.01.2011

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

person hbatista    schedule 14.01.2011
comment
Совершенно верно, спасибо (это также проблема с исходным кодом OP). - person The Archetypal Paul; 14.01.2011

person    schedule
comment
это придирка, но компилятор жалуется, что toMap в конце не использует точечную нотацию (т.е. .toMap) - person Andrew Norman; 18.04.2016