什么是从Java生成任意XML的好库?

时间:2010-01-11 20:55:07

标签: java xml

我需要从Java对象生成许多XML文档。对象是深度ORM映射对象,XML文档用于搜索索引(la Lucene)。我希望能够创建一个配置文件并将其提供给Java对象并让它吐出配置中指定的XML。理想情况下,配置将包括Java端(可能是深层)属性到XPath的映射或者与XML端非常相似的映射。

JAXB不合适,因为它希望创建从对象数据到XML节点的一对一映射。我看过JIBX和XStream,但它们似乎都没有被设计成我正在谈论的内容。

基本上我想要的是Dozer,但设计用于创建XML文档作为其目标而不是另一个Java bean。从我到目前为止的研究看起来我将不得不自己写这个。任何人都可以提供更好的选择吗?

编辑: 解决方案不得以修改源Java文件的能力为基础。基于注释的系统对我的目的来说是无用的。应该可以为各个映射定义“翻译器”,就像在Dozer中一样。

应该注意的是,我需要能够指定java中的给定输入字段可能在XML输出中的几个不同位置输出,可能在某些情况下转换而在其他情况下不转换。

我已经考虑过对某些对象直接进行Java到XML的转换,然后使用XSLT执行我的任务,但问题是这些是具有双向连接的深层对象。任何对象到XML的映射都很难确定对象层次结构的深度,即使它可以跟踪哪些对象应该打折,因为它们已经被看到了。

8 个答案:

答案 0 :(得分:4)

我用这个: Simple

答案 1 :(得分:1)

你看过Castor吗?

特别是,他们网页上的这句话让我觉得它可能会做你想做的事情:

  

尽管可以依靠Castor的默认行为来将Java对象编组和解组为XML文档,但可能需要对此行为进行更多控制。例如,如果Java对象模型已经存在,则Castor XML Mapping可以用作XML文档和Java对象模型之间的桥梁。

     

Castor允许使用映射文件指定其某些编组/解组行为。该文件向Castor提供有关给定XML文档和给定Java对象集如何相互关联的明确信息。

另一种可能性可能是JXM;来自他们的网页:

  

Java XML Mapping(JXM)是一种将Java对象编写为XML并再次读取它们的工具。 JXM提供了一个默认映射,因此可以通过调用单个方法将遵循Java Bean命名约定的Java对象写入XML。可以通过使用JXM框架创建和注册映射类来自定义默认映射。

     

JXM与其他XML绑定工具的不同之处在于不要求对象包含或继承JXM代码。对象中不包含生成的代码,并且它们不需要实现JXM接口。通过编写Java代码而不是XML描述符来完成定制。

答案 2 :(得分:1)

Xstream很好

答案 3 :(得分:1)

看看XOM,构建XML文档非常简单。

http://www.cafeconleche.org/XOM/

答案 4 :(得分:0)

看看Xmappr

可以通过外部XML进行配置。您可以使用多个映射从同一输入对象生成不同的输出。

我们也愿意提供帮助 - 只需在邮件列表中查询。

答案 5 :(得分:0)

我们过去曾使用过Apache Velocity来保持简单。

只需为XML创建模板,填充数据结构并在地图中注入数据结构。它允许您在运行时更改XML(只要您的数据结构具有所有字段)。

这是一种非常快速灵活的文档生成方式,它不会创建DOM,因此对内存非常简约。

答案 6 :(得分:0)

您想要的解决方案是EclipseLink MOXy

MOXy是一个带有扩展的JAXB实现

MOXy有一个外部配置文件(基于带扩展名的JAXB注释):

基于XPath的映射,用于深度映射:

旨在处理ORM映射对象,包括支持双向关系:

答案 7 :(得分:0)

你没有指定你使用的ORM,但如果它是休眠的话,你可以用它来做Java< - > XML映射也是如此。文档不如DB映射好,但它并不难使用。最大的优势:您可以减少一个依赖项,减少一个学习框架,以及您为数据库映射学习的概念,直到主要应用于XML映射。

请参阅:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/xml.html