9

假设我有一个名为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类对象的每个字段设置数据。

4

2 回答 2

13

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

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

注意:
术语编组和解组不仅与对象/ XML相关,反之亦然。在这里阅读:编组(计算机科学)

Java 自己的解决方案称为Java Architecture for XML Binding (JAXB)。它是由JSR 222描述的规范。JDK 包含一个JAXB 实现,因此您(通常)不需要从JAXB 项目主页下载独立的参考实现 (RI)

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


有用的链接

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


重要的提示:

JAXB 是一个规范,它有不同的实现(包括Reference Implementation)。但是这些传统的实现不能使用XPath,这是可悲的,因为对于高度嵌套的 XML 文件,使用 XPath 可以更有效。

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

以下是一些相关链接:

于 2013-05-26T00:16:38.543 回答
2

使用JAXB,这是一种标准的 Java 方式来进行 XML 绑定 - 这意味着将对象转换为 XML 并返回。您可以在您的类上应用一些注释,这基本上就是您需要做的所有事情,这样您就可以避免创建自己的自定义 XML 解析器。

于 2013-05-25T21:15:29.947 回答