诚然,我真的很喜欢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库可以用简单的语法生成节点和值,而不必制作“模板”或手动编写节点?
发布于 2012-03-03 04:50:18
由于属性和子节点的“双重层次结构”,构建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>这只是一个快速和肮脏的技巧,但我认为它可以很容易地改进(例如,包括列表),并使其更安全。
发布于 2012-03-02 17:09:18
您是否知道XML是Scala中的原生类型?您可以直接返回XML,不需要任何库。
有关示例,请参阅this。
发布于 2012-03-03 01:10:44
您可以在Scala中使用XML内联:
val someNode = <root>
<child>
Some stuff goes here
</child>
</root>
someNode \ "child" // returns the child node
someNode \ "child" text // returns the text of the child nodehttps://stackoverflow.com/questions/9528632
复制相似问题