在Scala中测试XML属性

时间:2014-11-05 10:08:13

标签: xml scala

假设我有一个XML和地图

val xml = 
<a>
   <b x="x1" y="y1"/>
   <b x="x2" y="y2"/>
   <b x="x3" y="y3"/>
</a>

val m = Map("x1" -> "y1", "x2" -> "y2", "x3" -> "y3")

我从XML中获取<b>元素,并检查元素是否包含xy属性,如地图m中所示。

val bs = xml \\ "b"
((bs \\ "@x").map(_.text) zip (bs \\ "@y").map(_.text)).toSet == m.toSet

此代码的问题:

  • 代码重复
  • bs过了两次 等

您如何修复/改进此代码?

1 个答案:

答案 0 :(得分:1)

如何创建元组列表,转换然后设置:

scala> val m = Map("x1" -> "y1", "x2" -> "y2", "x3" -> "y3")
m: scala.collection.immutable.Map[String,String] = Map(x1 -> y1, x2 -> y2, x3 -> y3)

scala> m.toSet
res56: scala.collection.immutable.Set[(String, String)] = Set((x1,y1), (x2,y2), (x3,y3))


scala> val m2 = bs map ( node => ( (node \\ "@x").text , (node \\ "@y").text  ))
m2: scala.collection.immutable.Seq[(String, String)] = List((x1,y1), (x2,y2), (x3,y3))

scala> m2.toSet
res57: scala.collection.immutable.Set[(String, String)] = Set((x1,y1), (x2,y2), (x3,y3))

scala> m.toSet == m2.toSet
res49: Boolean = true