Scala XML序列化

thS*_*oft 7 xml serialization scala

看到Scala的强大功能,我想知道是否可以使用内置的Scala语言特性和库(例如,没有XMLEncoder,XStream或JAXB)将任意对象图序列化和反序列化为XML.不幸的是,我还没有找到这样的解决方案.你有什么建议吗?

Eug*_*ota 8

我不知道"是否可以使用内置的Scala语言特性和库对任意对象图进行序列化和反序列化,"但是由于Scala中有一些对XML的本机支持,我会提到它们.更多细节可以在Ch.Scala编程 26,称为使用XML:

本章介绍Scala对XML的支持.在讨论了一般的半结构化数据之后,它展示了Scala中用于操作XML的基本功能:如何使用XML文字创建节点,如何将XML保存和加载到文件,以及如何使用查询方法和模式匹配拆分XML节点.

为了快速总结这一章,我将引用一些关键点.

  • Scala包含对处理XML的特殊支持.
  • Scala允许您在表达式有效的任何位置键入XML作为文字.
  • 您可以使用花括号({})作为转义来评估XML文本中间的Scala代码.

所以你可以这样写:

val foo = <a> {3 + 4} </a>
Run Code Online (Sandbox Code Playgroud)

以上评估为scala.xml.Elem = <a> 7 </a>.

  • 如果要按标签名称查找子元素,只需\使用标记名称进行调用.
  • 您可以通过使用\\而不是\运算符来执行"深度搜索"并查看子子元素等.

这本书有一个抽象类的序列化和反序列化的例子,但它是手写的:

abstract class CCTherm {
  val description: String
  val yearMade: Int

  def toXML =
    <cctherm>
      <description>{description}</description>
      <yearMade>{yearMade}</yearMade>
    </cctherm>

  def fromXML(node: scala.xml.Node): CCTherm =
    new CCTherm {
      val description = (node \ "description").text
      val yearMade    = (node \ "yearMade").text.toInt
    }    
}
Run Code Online (Sandbox Code Playgroud)

还可以在名为scala.xml的草稿中找到更多信息.


Eis*_*ith 4

据我所知,没有这样的事情。但你可能想看看sbinary