将Java对象图保存为XML文件

时间:2008-09-15 13:05:44

标签: java xml

将任意Java对象图保存为XML文件(以及以后能够对对象进行再水化)的最简单易用的技术是什么?

15 个答案:

答案 0 :(得分:8)

这里最简单的方法是序列化对象图。 Java 1.4内置了对XML序列化的支持。

我成功使用的解决方案是XStream(http://x-stream.github.io/)-它是一个小型库,可以轻松地对XML进行序列化和反序列化。

缺点是你只能非常有限地定义生成的XML;在你的情况下可能不是必要的。

答案 1 :(得分:4)

Apache digester非常简单:http://commons.apache.org/digester/
JAXB更新,带有注释优点:https://jaxb.dev.java.net

答案 2 :(得分:4)

Thoughtworks的人们使用XStream有一个简单的API,甚至可以处理重复和循环引用等内容。它似乎是积极开发的,并且有很好的文档记录。

http://x-stream.github.io/

答案 3 :(得分:3)

使用java.beans.XMLEncoder。它的API非常简单(实际上有点太简单了;将它连接到SAX ContentHandler会很好),但它适用于许多开箱即用的图形,并且很容易为任何奇数创建自己的持久性委托 - 你可能会遇到的球类。

  • XMLDecoder使用的语法允许 你要调用任何方法,实例 或静态的,包括构造函数, 所以它非常灵活。
  • 其他编码器名称 课后的元素和属性 和字段名称,因此结果没有固定的架构。 XMLEncoder的 XML遵循简单的DTD并且可以 容易被验证或改造, 即使你从未见过 它使用的类型。
  • 您可以指定对象 标识符,并引用它们 整个图表。
  • 您可以参考定义的常量 在类或接口中。

而且,它内置于Java SE中,因此您无需发布额外的库。

答案 4 :(得分:3)

简单

虽然XStream和JAXB可以很好地序列化一些对象图,但它们无法处理非常复杂的图形。对于大型复杂图形,最强大的解决方案是Simple XML Serialization。它可以处理任何图形。此外,它使用起来快速而简单,没有任何依赖性。

引用简单项目页面:

  

Simple是Java的高性能XML序列化和配置框架。其目标是提供一个XML框架,支持快速开发XML配置和通信系统。该框架以最小的努力和减少的错误帮助XML系统的开发。它提供完整的对象序列化和反序列化,维护遇到的每个引用。实质上,它类似于Java平台的C#XML序列化,但提供了拦截和操作的附加功能。

答案 5 :(得分:2)

Simple API很简单!真的很棒。 http://simple.sourceforge.net/

您也可以使用XStream:http://www.ibm.com/developerworks/library/x-xstream/index.html

答案 6 :(得分:2)

JAX-B是标准API的一部分,非常易于使用。

答案 7 :(得分:2)

如果您需要控制生成的XML,我建议您查看Betwixt(http://commons.apache.org/betwixt/) - 它为Apache的消化器添加了许多功能(Digester适用于从XML构建对象图,但是生成它们并不是那么好。)

如果你真的不关心生成的XML(只是它可以在将来反序列化),那么构建到Java或者很好的XMLEncoder / Decoder类 - 只要你序列化的对象遵循JavaBean规范。我遇到XMLEncoder / Decoder解决方案问题的最大区域是,如果你有一个bean为它的一个属性返回一个不可变列表 - 编码器不能很好地处理这种情况。

答案 8 :(得分:1)

XStream非常简单http://x-stream.github.io/

XStream是一个简单的库,用于将对象序列化为XML,然后再返回。

答案 9 :(得分:1)

如果需要控制XML的结构,XStream是一个不错的选择。您可以使用注释来精确定义XML和对象的结构/映射。

答案 10 :(得分:1)

我是第二个(或第三个)XStream。它可以读取和写入XML,而无需任何特殊的绑定配置或在XML中放置大量无关的语法。

答案 11 :(得分:1)

put together a list包含许多xml序列化库及其许可证

答案 12 :(得分:0)

答案 13 :(得分:0)

杰克逊

Jackson Project是XML,JSON和其他格式的处理和绑定库。

  

…Jackson是一套用于Java(和JVM平台)的数据处理工具,包括旗舰级流JSON解析器/生成器库,匹配的数据绑定库(与JSON之间的POJO)和附加的数据格式模块。处理以Avro,BSON,CBOR,CSV,Smile,(Java)属性,Protobuf,XML或YAML编码的数据;甚至是大量的数据格式模块,以支持广泛使用的数据类型的数据类型,例如Guava,Joda,PCollections以及许多很多其他数据……

答案 14 :(得分:-1)

如果您真的只对将对象序列化为文件然后在以后反序列化感兴趣,那么您可能会检查YAML而不是XML。 YAML比XML更容易使用,输出文件非常易读(可能需要也可能不需要)。有关详细信息,请查看yaml.org。我已经在最近的项目中成功使用了JYAML