Сложнее построить XML, чем JSON, из-за «двойной иерархии» атрибутов и дочерних узлов. Структура JSON легко представлена стандартными коллекциями Scala с помощью вложенных карт и списков.
Но если вас просто интересует подмножество XML, проблемы менее сложны. Согласно вашему ответу на мой комментарий, следующий фрагмент может быть достаточно для того, что вам нужно:
def tag( name: String, content: Seq[Node] ): Node =
<xml></xml>.copy( label = name, child = content )
def toXML( label: String, content: String ): Node =
tag( label, Text( content ) )
def toXML( root: String, map: Map[_,_] ): Node = {
val children = for( (k,v) <- map ) yield {
v match {
case m: Map[_,_] => toXML( k.toString, m )
case a => toXML(k.toString, a.toString )
}
}
tag( root, children.toSeq )
}
Работает как положено. Например:
val data = Map(
"id" -> 121,
"foo" -> Map(
"hoo" -> "bar",
"goo" -> "baz"
)
)
val xml = convert.toXML( "example", data )
Тогда xml
будет равно:
<example>
<id>121</id>
<foo>
<hoo>bar</hoo>
<goo>baz</goo>
</foo>
</example>
Это просто быстрый и грязный хак, но я думаю, что его можно легко улучшить (например, включить списки) и сделать более безопасным.