将XML转换为Java对象的最佳方法是什么?
我不想要类似的表示,但想从XML中提取某些数据并填充Java对象。我看过XStream,但并不喜欢整个“向下移动”的东西。在编写转换器时,我更喜欢像DOM这样的对象......
答案 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.Marshaller
和javax.xml.bind.Unmarshaller
实现来获得你想要的,而不必不必要地填补你的perm gen空间。使用JDOM解析XML并使用XPath将值映射到Java对象。这样做一次会有一些工作,但你将完全得到你所需要的东西,仅此而已。
答案 2 :(得分:8)
查看Apache Digester
答案 3 :(得分:6)
JAXB是将对象转换为XML的最佳方式,MOXy是最佳的JAXB实现。
MOXy提供以下扩展名:
答案 4 :(得分:4)
您可以使用Castor方便地将XML转换为Java并返回。
使用Castor,您可以
答案 5 :(得分:3)
答案 6 :(得分:2)
我不完全确定这是否是您正在寻找的,但您可以使用XMLBeans之类的东西将XML绑定到Java对象。我不得不在以前的雇主那里使用它。不幸的是,它是一个现有的系统,我只需要操纵对象,而不必生成包含它们的库。另外,我不确定没有XSD它会有多好(你没有提到你是否有一个)。