加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读