Java对象到XML模式

时间:2008-11-04 17:57:00

标签: java xml object

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

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

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

7 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

我正在使用XStream进行Object do 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迷你教程here

答案 2 :(得分:2)

我使用名为JiBx的java库来完成这项工作。您需要编写一个映射文件(以XML格式)来描述您希望XML Schema元素映射到java对象的方式。有一些生成器工具可以帮助实现流程自动化。而且它真的很快。

答案 3 :(得分:2)

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

不可否认,我对所有这些图书馆的测试都不完整,但出于问题中提到的目的,我发现Woodstox是最好的。编组是最快的(在我的测试中,击败XStream大约30~40%)。它也很容易使用和控制。

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

答案 4 :(得分:1)

您可以使用名为Betwixt的Apache Commons库。它可以将bean映射到XML,如果需要往返,则可以再次返回。

答案 5 :(得分:1)

看看JDOM

答案 6 :(得分:0)

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