2011-01-14 34 views
3

創建一個地圖,我有以下XML節點:從scala.xml.NodeSeq

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

現在我想創建一個地圖[字符串,節點]與字段名作爲關鍵字。

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

使用屈服以上我得到地圖列表,但:

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

如何在功能上得到了地圖[字符串,節點]沒有去的必要方式(溫度,增值經銷商)改造將列表映射到最終所需的地圖,可能沒有收益?

回答

5
xml \ "field" map { x => ((x \ "@name").text -> x) } toMap 
+1

它是一個挑剔的,但編譯器抱怨最後toMap不使用點符號(即.toMap) – 2016-04-18 17:58:08

4

我想有一個還沒有更簡單的方法來做到這一點,但

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

應該工作。你基本上產生了一系列元組,然後將其轉換爲Map。

2

無論是貼的答案產生的地圖,但要獲得地圖[字符串,節點]你必須調用(x \ "@name").text來獲得屬性值。

+0

非常正確,謝謝(這也是OP的原始代碼問題)。 – 2011-01-14 15:44:30