诚然,我真的很喜欢 Jerkson 库,因为它使生成 JSON 变得如此简单。举个例子:
Json(generate(Job.search(parseDate(date),accountId)
.map(job => Map("id" -> job.id,
"name" -> job.name,
"userId" -> job.userId.getOrElse("")
))))
但我很难找到一个类似的库,它可以像这样轻松地生成和序列化 XML 节点等。是否有 Java 或 Scala 库可以用简单的语法生成节点和值,而无需制作"template"或手动编写节点?
最佳答案
由于属性和子节点的“双重层次结构”,构建 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>
这只是一个快速而肮脏的 hack,但我认为它可以很容易地改进(例如包括列表)并变得更安全。
关于xml - Jerkson 让 Scala JSON 变得如此简单,XML 也能一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9528632/