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

Java到XML转换?[关闭]

  •  27
  • Rachel  · 技术社区  · 14 年前

    转换的方法有哪些不同 Java Objects XML 我知道一个选择是 JAXB 但是想知道另一个是什么 approaches/tools 可用于相同的用途?

    注: 我没有进一步的要求,所以我不能再增加 meat 对于这个问题,但是在这个时候,如果我能知道有什么不同的方法可以转换,那就太好了。 Java to XML ?

    更新: 不同的建议方法是:

    1. javax.xml.bind.Marshaller javax.xml.bind.Unmarshaller
    2. XStream
    3. XMLBean
    4. JAXB
    5. Castor
    6. JIBX
    7. Apache Digester

    在所有建议的方法中,什么是 最好的 转换方法 Java Objects to XML XML to Java Objects ?

    9 回复  |  直到 8 年前
        1
  •  32
  •   Pyves    8 年前

    JAXB是将Java对象转换为XML的标准和最佳方法。有几种开放源代码实现可用:

    有关JAXB的更多信息,请访问我的博客:

    更新:

    最好的方法是什么?

    这最终取决于你想做什么,我将解释如下:

    用例1-从XML模式开始

    在这个用例中,你有一个XML模式,你想生成一个Java模型。这个线程中提到的工具不支持这个用例。 XStream for example recommends XMLBeans for this

    提名人:

    • JAXB(所有实现)-使用JAXB注释生成POJO。
    • xmlbeans-生成包含XML绑定逻辑的专有类。

    用例2——从Java类开始(可以编辑)

    在这个用例中,您有更多的选择(只消除了xmlbeans)。编辑通常需要添加注释来控制映射。

    提名人:

    • 除xmlbeans以外的所有人

    用例3——从Java类开始(无法编辑)

    在这个用例中,您没有修改模型类的源代码。这要求元数据在外部由代码提供XML文件。

    提名人:

    • EclipseLink JAXB(Moxy)-提供 external binding file 和元数据可以通过编程方式应用。
    • Metro JAXB-可以利用Annox或JAXB介绍
    • Castor-提供外部绑定文件
    • jibx-提供外部绑定文件
    • XStream-元数据可以通过编程方式应用

    用例4-中间相遇(现有类和模式)

    在这个用例中,您有需要映射到现有XML模式的现有类。墨西哥人 XPath based mapping 是我所知道的唯一可以处理这个用例的工具

    提名人:

    • EclipseLink JAXB(莫西)

    用例5-XML信息集保留:

    在这个用例中,您需要保留未映射的内容:注释、处理指令等。

    提名人:

    • JAXB(所有实现)-具有 Binder 功能。
    • 生成的对象模型存储整个XML信息集。

    用例6-与JPA的兼容性

    JPA是Java持久化的Java标准。JPA有许多概念:组合键、双向关系、延迟加载等,很难与XML绑定解决方案一起使用。例如,任何只通过字段与对象交互的XML工具通常都会遇到延迟加载属性的问题。

    提名人:

    用例7-与XML Web服务(JAX-WS)的兼容性

    JAXB是JAX-WS的默认绑定层。

    提名人:

    • JAXB(实现取决于JAX-WS提供程序)

    用例8-与RESTful Web服务(JAX-RS)的兼容性

    JAX-RS提供了一种基于HTTP协议的轻量级JAX-WS替代方案。查看以下内容 example .

    提名人:

    • JAXB(所有实现)-默认绑定层,最容易与JAX-R一起使用。
    • 其他一切—您可以利用messagebodyreader/writer的概念来使用其他XML工具。

    用例9-与弹簧的兼容性

    Spring有一些与XML绑定工具集成的内置支持,有关详细信息,请查看以下链接:

    提名人:

    • JAXB(所有实现)
    • 蓖麻
    • XMLBeans
    • 吉布斯

    其他需要考虑的事项

    • 工具是否仍在开发/支持中?听起来很有趣,我见过有人推荐5年内没有更新的工具。这里提到的一些工具已经两年没有发布了。

    我选择最好的方法?JAXB

    从上面的类别来看,JAXB可能并不总是最适合某个特定用例(但它总是很适合的),但它是唯一可以用于所有用例的库。这意味着它总是可以完成这项工作。另一种选择是为不同的任务使用不同的库,从而为您提供多个库来支持。

    我确实领导了一个JAXB实现eclipselink-moxy,但moxy最初是一个专有的XML绑定库toplink-oxm。Toplink一直理解标准(即EJB/JPA)的好处,我们实现了JAXB 1。然后我们(我是代表)成为了JAXB2(JSR-222)的活跃成员。

        2
  •  10
  •   duffymo    14 年前

    你总是可以自己做 javax.xml.bind.Marshaller javax.xml.bind.Unmarshaller 接口。

    这并不像听起来那么疯狂。这并不难,而且你将完全控制和了解所做的事情。

    我愿意承认,很多人更喜欢自动化方法。我的提议不受欢迎。

    我以前使用过XStream并喜欢它,但是使用它时,我不必担心XML名称空间。我听说Xstream处理得不好。

        3
  •  2
  •   Martin    14 年前

    一些替代方案包括:

    然而,与JAXB一起运行的一个显著优点是它可以使用Java分区。

        4
  •  1
  •   Mike Baranczak    14 年前

    我知道这不是您要求的,但是您考虑过JSON而不是XML吗?我目前正在开发一个大量使用JSON的项目(使用 Jackson 图书馆)我很满意。杰克逊的工作原理与JAXB类似——它甚至可以与JAXB注释一起工作,以防您同时使用两者。

    XMLBeans 也值得一看。

        5
  •  1
  •   Basil Bourque    11 年前

    简单XML序列化(simpleframework.org)

    另一种方法是 Simple 它比JAXB、JiBX或其他类似工具更容易使用。只需注释类,就可以将任何POJO序列化为XML。此外,它可能是目前在所有已知Java平台上工作的唯一框架,包括Android、谷歌App Engine、任何JDK 1.5 +。有关更多信息,请查看 Tutorial

        6
  •  0
  •   Puce    14 年前

    还有:

    • java.beans.xmlcoder/-解码器
    • javax.xml.stream.xmlstreamwriter

    但是我建议如果你没有充分的理由使用JAXB。

        7
  •  0
  •   fastcodejava    14 年前

    你可以看看 castor jibx 也。

        8
  •  0
  •   Emil    14 年前

    Apache Digester 是一种选择。这里是 tutorial 如果可以接受JSON格式,则可以使用 google-gson

        9
  •  0
  •   SMac    14 年前

    Casor允许直接从XSD模式生成Java类(体面实现)(以上用例用例1)。 在android 2.1中,请确保不要使用默认的android saxparser。您将得到名称空间错误。通过将解析器定义为core.properties中的Xerces(并添加所需的JAR),可以做到这一点。在Android 2.2中,这可能是正常的。请注意,如果使用Xerces为解封器创建一个XMLContext,它仍然无法工作,因为映射本身将使用Android的SAX进行解析。它必须在核心(顶级属性文件)上完成,这样Xerces甚至可以解析映射。最后-性能和您期望的一样慢…:(祝你好运