【问题标题】:Which XML serialization library for Scala?哪个用于 Scala 的 XML 序列化库?
【发布时间】:2012-03-22 23:59:58
【问题描述】:

我正在寻找 scala 的 xml 序列化库。 对于 json 序列化,我使用 lift-json,并希望我的 xml 序列化库是相似的,这意味着:

  • 案例类的自动序列化(没有任何格式定义)
  • scala 类型的智能序列化:集合、选项等
  • 能够为其他数据类型定义格式以调整它们的序列化方式
  • 反序列化不是基于隐式而是基于类名(有时我只有必须反序列化的类型的类/类名)

你知道这样的库是否存在吗?

【问题讨论】:

    标签: xml serialization scala xml-serialization


    【解决方案1】:

    一个很好的选择是使用纯 Java 库 XStream。

    这适用于开箱即用的案例类,并进行了一些调整 - 我正在使用来自 mixedbits-webframework 的类 XStreamConversions - 它也适用于 List、Tuple、Symbol、ListBuffer 和 ArrayBuffer。所以它并不完美,但您肯定可以根据您的特定需求对其进行微调。
    这是一个小例子。

        import com.thoughtworks.xstream.XStream
        import com.thoughtworks.xstream.io.xml.StaxDriver
        import net.mixedbits.tools.XStreamConversions
    
        case class Bar(a:String)
        case class Foo(a:String,b:Int,bar:Seq[Bar])
    
        object XStreamDemo {
          def main(args: Array[String]) {
                val xstream = XStreamConversions(new XStream(new StaxDriver()))
                xstream.alias("foo", classOf[Foo])
                xstream.alias("bar", classOf[Bar])
                val f0 = Foo("foo", 1, List(Bar("bar1"),Bar("bar2")))
    
                val xml = xstream.toXML(f0)
                println(xml)
    
                val f1 = xstream.fromXML(xml)
                println(f1)
                println(f1 == f0)
          }
        }
    

    这会产生以下输出:

        <?xml version="1.0" ?><foo><a>foo</a><b>1</b><bar class="list"><bar><a>bar1</a></bar><bar><a>bar2</a></bar></bar></foo>
        Foo(foo,1,List(Bar(bar1), Bar(bar2)))
        true
    

    对于 Java 1.6 / Scala 2.9,依赖项是 xstream.jar 文件和提到的 XStreamConversions 类。

    【讨论】:

    • 这种方法的坏处是缺乏对Option[]的处理
    【解决方案2】:

    试试scalaxb

    【讨论】:

    • Scalaxb 将 xsd 文件转换为 scala 类。但我有 scala 类,想序列化它们。
    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2012-09-12
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多