Scala 2.10.2如何将HashMap转换为XML

时间:2014-08-25 20:33:08

标签: xml scala hashmap

我有以下代码

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的正确代码是什么?

2 个答案:

答案 0 :(得分:1)

两个问题:

  1. foreach用于副作用,map用于转换。 (m.foreach(month2XML)应为m.map(month2XML)。)

  2. 当您只想返回<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>