我有以下xml节点:
val xml = <fields><field name="one"></field><field name="two"></field></fields>
现在我想创建一个Map [String,Node],其中field-name为键。
for{x <- xml \ "field"} yield Map(x \ "@name" -> x)
使用上面的yield我得到了一个地图列表:
List(Map((one,<field name="one"></field>)), Map((two,<field name="two"></field>)))
如何在不使用命令式方法(temp-vars)的情况下功能性地获取Map [String,Node],将List中的Maps转换为最终所需的Map,可能没有收益?
答案 0 :(得分:5)
xml \ "field" map { x => ((x \ "@name").text -> x) } toMap
答案 1 :(得分:4)
我想有一种更简单的方法可以做到这一点,但是
(for{x <- xml \ "field"} yield (x \ "@name", x)).toMap
应该有效。您基本上会产生一系列元组,然后将其转换为Map。
答案 2 :(得分:2)
两个发布的答案都会生成一个地图,但要获取Map [String,Node],您必须调用(x \ "@name").text
来获取属性值。