从scala.xml.NodeSeq创建映射

从scala.xml.NodeSeq创建映射,scala,scala-collections,Scala,Scala Collections,我有以下xml节点: val xml = <fields><field name="one"></field><field name="two"></field></fields> val xml= 现在我想创建一个Map[String,Node],字段名作为键 for{x <- xml \ "field"} yield Map(x \ "@name" -> x) 用于{x) 使用上面的收益率,我得到了一

我有以下xml节点:

val xml = <fields><field name="one"></field><field name="two"></field></fields>
val xml=
现在我想创建一个Map[String,Node],字段名作为键

for{x <- xml \ "field"} yield Map(x \ "@name" -> x)
用于{x)
使用上面的收益率,我得到了一个地图列表:

List(Map((one,<field name="one"></field>)), Map((two,<field name="two"></field>))) 
列表(地图((一),地图((二)

如何在功能上获得映射[String,Node],而不使用命令式方式(temp vars)将列表中的映射转换为最终所需的映射,可能不会产生结果?

我想有一种更简单的方法来实现这一点,但是

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

(对于{x而言,两个发布的答案都会生成一个映射,但要获得映射[String,Node],必须调用
(x\“@name”).text
以获得属性值。

非常正确,谢谢(这也是OP的原始代码的问题)。这是一个挑剔,但编译器抱怨最后的toMap没有使用点符号(即toMap)
  xml \ "field" map { x => ((x \ "@name").text -> x) } toMap