提问人:Lehane 提问时间:11/5/2008 更新时间:2/10/2009 访问量:9476
Java 对象到 XML 模式
Java object to XML schema
问:
如果您有一个 Java 对象和一个 XML 模式 (XSD),那么获取该对象并将其转换为符合该模式的 xml 文件的最佳方法是什么?对象和模式彼此不知道(因为 java 类不是从模式创建的)。
例如,在类中,可能有一个整数字段“totalCountValue”,该字段对应于 xsd 文件中名为“countTotal”的元素。有没有办法创建一个映射,该映射会说“如果对象包含 int totalCountValue,请创建一个名为”countTotal“的元素并将其放入 XML 中”。 同样,对象中可能有一个应忽略的字段,或者对象中应与多个 XML 元素对应的列表。
我查看了 XStream,但没有看到任何(明显的)方法。是否有其他 XML 库可以简化此任务?
答:
我相信这可以通过JAXB使用它的注释来实现。我通常发现使用 XJC 从 JAXB(如您的模式中定义)生成对象比映射现有的 Java 对象以匹配我的模式要容易得多。YMMV。
我正在使用 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 教程
评论
我使用一个名为 JiBx 的 java 库来完成这项工作。您需要编写一个映射文件(XML)来描述您希望 XML Schema 元素如何映射到 java 对象。有几个生成器工具可以帮助自动化该过程。另外,它的速度非常快。
您可以使用 Apache Commons 中名为 Betwixt 的库。它可以将 Bean 映射到 XML,然后在需要往返时再次映射。
看看 JDOM。
我尝试了大多数建议的库,看看哪一个最适合我的需求。我还尝试了一个这里没有提到的库,但由一位同事推荐,这是一个名为 Woodstox 的 StAX 实现。
诚然,我对所有这些库的测试并不完整,但出于问题中提到的目的,我发现 Woodstox 是最好的。它是编组最快的(在我的测试中,比 XStream 高出大约 30~40%)。它也相当易于使用和控制。
这种方法的缺点是创建的 XML(因为它是由我定义的)需要通过验证器运行,以确保它与架构正确。
我会说 JAXB 或 Castor。我发现 Castor 更易于使用且更可靠,但 JAXB 是标准
评论