vic*_*ont 6 scala xml-parsing playframework-2.0
我在Play框架驱动的webapp中有简单的实体.它看起来像这样:
case class MyItem(id: Option[Long] = None, name: String, comments: List[Comment])
case class Comment(commentDate: Date, commentText: String)
Run Code Online (Sandbox Code Playgroud)
我从DB获取XML,如下所示:
<?xml version="1.0"?>
<item>
<id>1</id>
<name>real item</name>
<comments>
<comment>
<comment_date>01.01.1970</comment_date>
<comment_text>it rocks</comment_text>
</comment>
<comment>
<comment_date>02.01.1970</comment_date>
<comment_text>it's terrible</comment_text>
</comment>
</comments>
</item>
Run Code Online (Sandbox Code Playgroud)
现在我不知道将它解析为模型和表单映射.
我的表单映射以防万一(现在不编译):
val itemForm = Form(
mapping(
"id" -> optional(longNumber),
"name" -> nonEmptyText,
"comments" -> list(mapping(
"commentDate" -> date("dd.mm.yyyy"),
"commentText" -> text
)(Comment.apply)(Comment.unapply))
)(MyItem.apply)(MyItem.unapply)
)
Run Code Online (Sandbox Code Playgroud)
这是问题第一部分的示例代码:
import scala.xml.{Comment => _, _}
case class Comment(commentDate: String, commentText: String)
case class MyItem(id: Option[Long] = None, name: String, comments: List[Comment])
object MyParser {
def parse(el: Elem) =
MyItem(Some((el \ "id").text.toLong), (el \ "name").text,
(el \\ "comment") map { c => Comment((c \ "comment_date").text, (c \ "comment_text").text)} toList)
}
Run Code Online (Sandbox Code Playgroud)
REPL 的结果:
scala> MyParser.parse(xml)
MyParser.parse(xml)
res1: MyItem = MyItem(Some(1),real item,List(Comment(01.01.1970,it rocks), Comment(02.01.1970,it's terrible)))
Run Code Online (Sandbox Code Playgroud)
我自由地更改为,commentDate因为String我想让程序看起来更简单。解析Date非常简单,阅读Joda Time 库文档就足够了。
| 归档时间: |
|
| 查看次数: |
2261 次 |
| 最近记录: |