java - 将 XML 映射到 Java 中的对象

标签 java xml jaxb xml-binding oxm

假设我有一个名为 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 字符串是

<test>
    <testId>1</testId>
    <description>This is first test</description>
    <department>surgeon</department>
</test>


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

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

最佳答案

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

它叫做 "XML data binding" ,或者“O/X Mapping”(对象/XML 映射),或者“OXM”。 将 XML 文档转换为对象称为解码
将对象转换(序列化)为 XML 文档称为编码

注意:
术语编码解码 不仅与对象/XML 相关,反之亦然。在这里阅读:Marshalling (Computer Science) .

Java 自己的解决方案叫做Java Architecture for XML Binding (JAXB) .这是JSR 222描述的规范. JDK 包含一个 JAXB implementation ,因此您(通常)不需要从 JAXB Project home page 下载独立的引用实现 (RI) .

注意:
您可以使用 xjc (binding compiler) 检查 JDK 的 JAXB 版本。 , 与 JDK 捆绑在一起:xjc -version


有用的链接

只需在谷歌上搜索“JAXB 教程”,就有很多。


重要提示:

JAXB 是一种规范,它有不同的实现(包括引用实现)。但是这些传统实现不能使用XPath ,这很可悲,因为对于大量嵌套的 XML 文件,使用 XPath 会更有效。

EclipseLink MOXy提供具有许多扩展的 JAXB 实现。其中之一是 XPath based mapping .在执行我的一个项目时,我发现它非常有用,其中涉及 OXM。

以下是一些相关链接:

关于java - 将 XML 映射到 Java 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16753945/

相关文章:

java - 接口(interface)内的嵌套类是隐式静态和最终的吗?

java - 如何用另一个按钮更改(图像和功能)按钮

c# - 将 DataSet 序列化为 XDocument 空格问题

java - 为 GWT 服务设置入口点时出现问题

java - 您会在 App Engine 中使用 "Future"做什么?

java - 使用枚举值 JAXB、XJC 中的数字生成大枚举类

java - 具有一对多关系和 java.util.Map 的 EclipseLink JAXB (MOXy)

java - Java 中的 JAXB 字符串到 JPA 日期

java - 如何将 Sparql 查询的两个不同但相关的结果集合并为一个?

java - 如何防止 xs :choice using xsdtojava? 自动生成 JAXBElement