将XML转换为Java对象

将XML转换为Java对象的最佳方法是什么?

我不希望类似的表示,但想从XML中提取某些数据并填充Java对象。 我看过XStream,但并不是真的喜欢整个“向下移动”的东西。 在编写转换器时,我更喜欢DOM之类的对象……

我知道每个人都喜欢像JAXB这样的自动解决方案,但是我建议手工编写javax.xml.bind.Marshallerjavax.xml.bind.Unmarshaller实现来获得你想要的东西,而不必不必要地填补你的perm gen空间。 使用JDOM解析XML并使用XPath将值映射到Java对象。 这样做一次会有一些工作,但你会得到你所需要的,仅此而已。

如果你有一个XML模式, JAXB很不错 – 作为JDK的一部分。 通过运行例如xjc -p foo myschema.xsd生成java类

要读取XML文件并获取对象(从xjc工具生成的类):

  JAXBContext context = JAXBContext.newInstance(FooObj.class); Unmarshaller unMarshaller = context.createUnmarshaller(); FooObj param = (FooObj) unMarshaller.unmarshal(new FileInputStream("Foo.xml")); 

如果您只希望将XML文档的某些部分转换为对象,则可以执行类似的操作,例如,您应该能够为JAXB提供部分DOM文档,而不是如上所述的整个文件。

查看Apache Digester

http://commons.apache.org/digester/

JAXB是将对象转换为XML的最佳方式,MOXy是最好的JAXB实现。

  • JAXB是标准的 ,包含在Java SE 6中
  • 用于JAX-WS,JAX-RS和SCA的标准XML绑定技术
  • 简单运行时

MOXy提供以下扩展:

  • 映射文件
  • 可以映射JPA实体
  • 基于XPath的映射

我喜欢Simple ,并且发现它很容易使用。 它确实产生了类似的表示forms,但也许不是你想要的。

如果您正在寻找类似DOM的解决方案,那么JDom可能是合适的。

您可以使用Castor方便地将XML转换为Java并返回。

有了Castor,你可以

  1. 轻松转换:简单的Marshaller和Unmarshaller将XML转换为Java并且非常容易。
  2. 映射:可以创建映射文件以限制要从XML转换为Java并返回的数据量。

我不完全确定这是否是您正在寻找的,但您可以使用XMLBeans之类的东西将XML绑定到Java对象。 我不得不在以前的雇主那里使用它。 不幸的是,它是一个现有的系统,我只需要操纵对象,而不必生成包含它们的库。 另外,我不确定没有XSD它会有多好(你没有提到你是否有一个)。