【问题标题】:Mapping XML to an object in Java将 XML 映射到 Java 中的对象
【发布时间】:2013-05-25 21:13:19
【问题描述】:

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

【问题讨论】:

    标签: java xml jaxb xml-binding oxm


    【解决方案1】:

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

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

    注意:
    marshallingunmarshalling 这两个术语不仅与 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,这很可悲,因为对于嵌套很重的 XML 文件,使用 XPath 会更有效。

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

    以下是一些相关链接:

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多