我有以下代码
import scala.collection.immutable.HashMap
class Year(val y : String, val m : HashMap[String, Int]) {
def toXML =
<year>
<number>{y}</number>
{m.foreach(month2XML(_))}
</year>
def month2XML(m : (String, Int)) : xml.Elem = <month><s>{m._1}</s><d>{m._2}</d></month>
}
object Year {
def main(args: Array[String]): Unit = {
val a : Year = new Year("2014", HashMap[String, Int]("January" -> 31, "February" -> 28))
println(a.toXML)
}
}
应返回类似
的内容<year>
<number>2014</number>
<month><s>January</s><d>31</d><s>February</s><d>28</d></month>
</year>
但跳过'month'节点而不是输出
<year>
<number>2014</number>
</year>
将HashMap转换为XML的正确代码是什么?
答案 0 :(得分:1)
两个问题:
foreach
用于副作用,map
用于转换。 (m.foreach(month2XML)
应为m.map(month2XML)
。)
当您只想返回<month>
和HashMap
的节点时,您将为s
中的每个条目返回d
个节点。
def toXML =
<year>
<number>{y}</number>
<month>{m.map(month2XML)}</month>
</year>
并更新month2XML
以仅返回内部节点:
def month2XML(m : (String, Int)) : xml.Elem = <s>{m._1}</s><d>{m._2}</d>
答案 1 :(得分:0)
谢谢肖恩! 这已经是修复(只有类Year)对象Year未被修改。
import scala.collection.immutable.HashMap
class Year(val y : String, val m : HashMap[String, Int]) {
def toXML =
<year>
<number>{y}</number>
{m.map(map2XML(_))}
</year>
def map2XML(m : (String, Int)) : xml.Elem = <month><s>{m._1}</s><d>{m._2}</d></month>
}
给出输出
<year>
<number>2014</number>
<month><s>January</s><d>31</d></month><month><s>February</s><d>28</d></month> <month><s>March</s><d>31</d></month>
</year>