将XML映射到Java中的对象

假设我有一个名为Test的类,就像这样

public class Test { private String testId; private String description; private String department; public Test() {} public Test(String id,String des,String dpt) { this.testId = id; this.department = dpt; this.description = des; } public String getTestId() { return testId; } public void setTestId(String testId) { this.testId = testId; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } } 

还包含一个XML字符串,其中包含Test类对象的数据。 XML字符串是

  1 This is first test surgeon  

现在我的任务是解析该XML字符串并创建Test类的对象,并将此XML中包含的所有数据放入该对象中。 我正在使用JDOM进行XML解析。 我想知道是否有任何解决方案可以将XML格式的所有数据直接复制到Test对象中?

现在我这样做:我解析XML字符串并逐个获取每个节点的数据,然后调用setter方法为Test类对象的每个字段设置数据。

简短回答:是的,有这样的解决方案。

它被称为“ XML数据绑定 ” ,或者称为“ O / X映射 ”(对象/ XML映射)或“ OXM ”。 将XML文档转换为对象称为解组
将对象转换(序列化)为XML文档称为编组

注意:
术语编组 和解组仅涉及对象/ XML,反之亦然。 阅读: 编组(计算机科学) 。

Java自己的解决方案称为Java绑定的Java架构(JAXB) 。 它是JSR 222描述的规范。 JDK包含JAXB实现 ,因此您(通常)不需要从JAXB Project主页下载独立的Reference Implementation(RI)

注意:
您可以使用与JDK捆绑在一起的xjc(绑定编译器)来检查您的JDK具有哪个版本的JAXB: xjc -version


有用的链接

  • 用于XML绑定的Java体系结构 – 官方Oracle Java学习资源
  • JAXB教程 – JAXB项目的官方教程( 参考实现
  • JAXB hello world示例 – 非常简单易学的教程
  • JAXB教程 – 入门 – 另一个带示例的简短教程

只是谷歌“JAXB教程”,有很多。


重要的提示:

JAXB是一个规范,它有不同的实现(包括参考实现 )。 但是这些传统的实现不能使用XPath ,这很难过,因为使用XPath的重度嵌套的XML文件可以更有效。

EclipseLink MOXy提供了许多扩展的JAXB实现。 其中之一是基于XPath的映射 。 在我参与其中涉及OXM的项目时,我发现它非常有用。

以下是一些相关链接:

  • 基于XPath的映射 – 来自EclipseLink JAXB(MOXy)项目团队负责人Blaise Doughan的非常有用的文章。 另请查看他博客中的其他文章。
  • 使用MOXy实现使您的JAXB更清洁 – 这是另一篇有用的文章,其中有一个很好的例子,概述了EclipseLink MOXy的优势。

使用JAXB ,它是如何进行XML绑定的标准Java方法 – 这意味着将对象转换为XML并返回。 您可以在您的类上应用少量注释,这基本上是您需要执行的所有操作,因此您可以避免创建自己的自定义XML解析器。