3

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

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

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

4

7 回答 7

6

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

于 2008-11-04T18:13:17.707 回答
4

我正在用 XStream 做对象做 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 迷你教程

于 2008-11-04T18:47:31.680 回答
2

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

于 2008-11-04T19:53:12.000 回答
2

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

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

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

于 2008-11-07T16:26:30.700 回答
1

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

于 2008-11-05T21:07:59.057 回答
1

看看JDOM

于 2008-11-05T21:16:13.453 回答
0

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

于 2009-02-10T11:08:56.253 回答