将XML转换为Java对象

时间:2010-07-18 15:38:43

标签: java xml jaxb

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

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

7 个答案:

答案 0 :(得分:24)

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

读取XML文件并返回一个对象(来自xjc工具生成的类):

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

如果您只想将XML文档的某些部分转换为对象,则可以执行类似的操作,例如,能够为JAXB提供部分DOM文档,而不是像上面那样提供整个文件。

答案 1 :(得分:12)

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

答案 2 :(得分:8)

查看Apache Digester

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

答案 3 :(得分:6)

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

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

MOXy提供以下扩展名:

答案 4 :(得分:4)

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

使用Castor,您可以

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:2)

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

相关问题