从scala.xml.NodeSeq创建一个Map

时间:2011-01-14 13:46:23

标签: scala scala-collections

我有以下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)

使用上面的yi​​eld我得到了一个地图列表:

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

如何在不使用命令式方法(temp-vars)的情况下功能性地获取Map [String,Node],将List中的Maps转换为最终所需的Map,可能没有收益?

3 个答案:

答案 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来获取属性值。