将XML映射到Java中的对象

时间:2013-05-25 21:13:19

标签: 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 类对象的每个字段设置数据。

2 个答案:

答案 0 :(得分:13)

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

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

注意:
marshalling unmarshalling 这两个术语仅与Object / XML相关,反之亦然。请在此处阅读:Marshalling (Computer Science)

Java自己的解决方案称为Java Architecture for XML Binding (JAXB)。这是JSR 222描述的规范。 JDK包含JAXB implementation,因此您(通常)不需要从JAXB Project home page下载独立的参考实现(RI)

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


有用的链接

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


重要提示:

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

EclipseLink MOXy提供了许多扩展的JAXB实现。其中一个是XPath based mapping。当我参与其中一个涉及OXM的项目时,我发现它非常有用。

以下是一些相关链接:

答案 1 :(得分:2)

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