代码之家  ›  专栏  ›  技术社区  ›  Jherico

什么是从Java生成任意XML的好的库?[关闭]

  •  5
  • Jherico  · 技术社区  · 15 年前

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

    JAXB不适合,因为它希望创建从对象数据到XML节点的一对一映射。我看过JiBX和Xstream,但它们似乎都不是为我所说的做设计的。

    本质上,我想要的是推土机,但它设计的是创建XML文档作为目标,而不是另一个JavaBean。从我目前的研究来看,我得自己写这个。有人能提供更好的选择吗?

    编辑: 该解决方案不能以修改源Java文件的能力为前提。基于注释的系统对我来说毫无用处。应该可以像在推土机中一样为单个映射定义“翻译器”。

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

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

    8 回复  |  直到 14 年前
        1
  •  4
  •   pstanton    15 年前

    我用这个: Simple

        2
  •  1
  •   Paul Wagland    15 年前

    你看过吗 Castor ?

    特别是,他们网页上的这句话让我觉得它可能会满足你的需求:

    虽然有可能依赖于Casor的默认行为来将Java对象编组和拆解成XML文档,但可能需要对该行为进行更多的控制。例如,如果Java对象模型已经存在,则可以使用Casor XML映射作为XML文档和Java对象模型之间的桥梁。

    Castor允许使用映射文件指定其某些编组/解组行为。这个文件为Casor提供了一个明确的信息,说明给定的XML文档和给定的Java对象集是如何相互关联的。

    另一种可能是 JXM ;从他们的网页:

    JavaXML映射(JXM)是一种用于将Java对象写入XML并再次读取它们的工具。JXM提供默认映射,以便通过调用单个方法可以将遵循JavaBean命名约定的Java对象写入XML。通过在jxm框架中创建和注册映射类,可以自定义默认映射。

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

        3
  •  1
  •   Gopi    15 年前

    Xstream 是好的

        4
  •  1
  •   Jonathan Holloway    14 年前

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

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

        5
  •  0
  •   Peter Knego    15 年前

    看一看 Xmappr .

    它可以通过外部XML进行配置。可以有几个映射从同一输入对象生成不同的输出。

    我们也愿意帮忙-只需在邮件列表上询问。

        6
  •  0
  •   Fortyrunner    15 年前

    过去我们使用ApacheVelocity作为保持简单的方法。

    只需为XML创建一个模板,填充数据结构并将数据结构插入到映射中。如果需要,它允许您在运行时更改XML(只要数据结构包含所有字段)。

    这是一种非常快速和灵活的生成文档的方法,它不创建DOM,因此节省了内存。

        7
  •  0
  •   Guillaume    14 年前

    您不指定使用哪一个ORM,但如果它是Hibernate,那么您也可以使用它来做Java& lt;-& gt;XML映射。文档不如DB映射好,但使用起来并不难。最大的优点是:您可以少依赖一个,少学习一个框架,以及您学到的DB映射概念,直到这些概念主要应用于XML映射。

    见: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/xml.html

        8
  •  0
  •   bdoughan    14 年前