Java 对象到 XML 模式

Java object to XML schema

提问人:Lehane 提问时间:11/5/2008 更新时间:2/10/2009 访问量:9476

问:

如果您有一个 Java 对象和一个 XML 模式 (XSD),那么获取该对象并将其转换为符合该模式的 xml 文件的最佳方法是什么?对象和模式彼此不知道(因为 java 类不是从模式创建的)。

例如,在类中,可能有一个整数字段“totalCountValue”,该字段对应于 xsd 文件中名为“countTotal”的元素。有没有办法创建一个映射,该映射会说“如果对象包含 int totalCountValue,请创建一个名为”countTotal“的元素并将其放入 XML 中”。 同样,对象中可能有一个应忽略的字段,或者对象中应与多个 XML 元素对应的列表。

我查看了 XStream,但没有看到任何(明显的)方法。是否有其他 XML 库可以简化此任务?

Java XML 对象

评论

0赞 Karussell 2/26/2010
此任务还有更多序列化程序:例如 JiBX 有关更多信息,请参见此处:karussell.wordpress.com/2009/09/03/xml-serializers-for-java

答:

6赞 basszero 11/5/2008 #1

我相信这可以通过JAXB使用它的注释来实现。我通常发现使用 XJC 从 JAXB(如您的模式中定义)生成对象比映射现有的 Java 对象以匹配我的模式要容易得多。YMMV。

4赞 bruno conde 11/5/2008 #2

我正在使用 XStream 进行 Object 执行 XML 序列化。你觉得这个序列化程序有什么“明显”的?一旦你掌握了它的窍门,它就非常简单。

在您提供的示例中,您可以有如下内容:

...
XStream xstream = new XStream(new DomDriver());

xstream.alias("myclass", MyClass.class);
xstream.aliasField("countTotal", MyClass.class, "totalCountValue");

String xml = xstream.toXML(this);
...

对于此示例类:

class MyClass {
     private int totalCountValue;

     public MyClass() {
     }
} 

如果您发现一些序列化程序比这更简单或更“酷”,请与我们分享。我也在寻找改变......

在此处查看 XStream mini 教程

评论

0赞 rshepherd 6/19/2010
因为这样一来,您的 Xstream 注释必须保持以符合 XSD。架构的冗余定义。
2赞 Thomas Jones-Low 11/5/2008 #3

我使用一个名为 JiBx 的 java 库来完成这项工作。您需要编写一个映射文件(XML)来描述您希望 XML Schema 元素如何映射到 java 对象。有几个生成器工具可以帮助自动化该过程。另外,它的速度非常快。

1赞 Mike Pone 11/6/2008 #4

您可以使用 Apache Commons 中名为 Betwixt 的库。它可以将 Bean 映射到 XML,然后在需要往返时再次映射。

1赞 dacracot 11/6/2008 #5

看看 JDOM。

2赞 Lehane 11/8/2008 #6

我尝试了大多数建议的库,看看哪一个最适合我的需求。我还尝试了一个这里没有提到的库,但由一位同事推荐,这是一个名为 Woodstox 的 StAX 实现。

诚然,我对所有这些库的测试并不完整,但出于问题中提到的目的,我发现 Woodstox 是最好的。它是编组最快的(在我的测试中,比 XStream 高出大约 30~40%)。它也相当易于使用和控制。

这种方法的缺点是创建的 XML(因为它是由我定义的)需要通过验证器运行,以确保它与架构正确。

0赞 Vihung 2/10/2009 #7

我会说 JAXB 或 Castor。我发现 Castor 更易于使用且更可靠,但 JAXB 是标准