scala – Play框架:将XML解析为模型
发布时间:2020-12-16 18:49:45 所属栏目:安全 来源:网络整理
导读:我在Play框架驱动的webapp中有简单的实体.它看起来像这样: case class MyItem(id: Option[Long] = None,name: String,comments: List[Comment])case class Comment(commentDate: Date,commentText: String) 我从DB获取XML,如下所示: ?xml version="1.0"?it
我在Play框架驱动的webapp中有简单的实体.它看起来像这样:
case class MyItem(id: Option[Long] = None,name: String,comments: List[Comment]) case class Comment(commentDate: Date,commentText: String) 我从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> 现在我不知道将它解析为模型和表单映射. 我的表单映射以防万一(现在不编译): 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) ) 解决方法
以下是问题第一部分的示例代码:
import scala.xml.{Comment => _,_} case class Comment(commentDate: String,commentText: String) case class MyItem(id: Option[Long] = None,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) } 而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))) 我自由地将commentDate更改为String,因为我想让程序看起来更简单.解析日期非常简单,足以阅读Joda Time library documentation. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |