如何将XML转换为Java对象?
我不需要对应的表示,但希望从XML中提取特定数据并填充Java对象。我查看了XStream,但不太喜欢整个“下移,上移”之类的东西。我更喜欢编写转换器时的DOM对象。
如果您拥有一个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文档的一部分,而不是整个文件。
我知道每个人都喜欢像JAXB之类的自动解决方案,但我建议手工编写javax.xml.bind.Marshaller
和javax.xml.bind.Unmarshaller
实现,以便在不必要地填充永久代空间的情况下获得所需的精确结果。 使用JDOM解析XML并使用XPath将值映射到Java对象中。 这可能需要一些工作,但您将获得完全符合要求的内容。
JAXB是将对象转换为XML的最佳方法,而MOXy是最佳的JAXB实现。
MOXy提供以下扩展:
我不确定这是否符合您的要求,但您可以使用类似XMLBeans的工具将XML绑定到Java对象上。我之前在一家公司使用过它。不幸的是,那是一个现成的系统,我只需要操作对象,而不需要生成包含它们的库。另外,我不确定没有XSD文件时它是否能正常工作(您没有提到是否有XSD文件)。