将XML转换为Java对象
将XML转换为Java对象的最佳方法是什么?
我不希望类似的表示,但想从XML中提取某些数据并填充Java对象。 我看过XStream,但并不是真的喜欢整个“向下移动”的东西。 在编写转换器时,我更喜欢DOM之类的对象……
我知道每个人都喜欢像JAXB这样的自动解决方案,但是我建议手工编写javax.xml.bind.Marshaller
和javax.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
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,你可以
- 轻松转换:简单的Marshaller和Unmarshaller将XML转换为Java并且非常容易。
- 映射:可以创建映射文件以限制要从XML转换为Java并返回的数据量。
我不完全确定这是否是您正在寻找的,但您可以使用XMLBeans之类的东西将XML绑定到Java对象。 我不得不在以前的雇主那里使用它。 不幸的是,它是一个现有的系统,我只需要操纵对象,而不必生成包含它们的库。 另外,我不确定没有XSD它会有多好(你没有提到你是否有一个)。