将 XML 映射到 Java 中的对象

2023-11-21

假设我有一个名为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 object?

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


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

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

NOTE:
条款编组 and 解组不仅与对象/XML 相关,反之亦然。阅读此处:编组(计算机科学).

Java自己的解决方案叫做XML 绑定的 Java 体系结构 (JAXB)。它是由以下描述的规范JSR 222。 JDK 包括一个JAXB 实施,所以你(通常)不需要下载独立的参考实现 (RI)来自JAXB 项目主页.

NOTE:
您可以使用以下命令检查您的 JDK 有哪个版本的 JAXBxjc(绑定编译器),与 JDK 捆绑在一起:xjc -version


有用的链接

  • XML 的 Java 架构 捆绑- 官方 Oracle Java 学习路线
  • JAXB 教程- 官方教程 来自JAXB项目 (参考 执行)
  • JAXB你好世界 例子- 非常 简单易行的教程
  • JAXB 教程 – 获取 开始- 另一个带有示例的简短教程

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


重要的提示:

JAXB 是一个规范,它有不同的实现(包括参考实现)。但这些传统的实现方式无法使用XPath,这很遗憾,因为对于深度嵌套的 XML 文件,使用 XPath 可能更有效。

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

以下是一些相关链接:

  • 基于XPath 测绘- 非常有帮助的文章来自布莱斯·道安, 团队负责人 用于 EclipseLink JAXB (MOXy) 项目。还可以查看其他文章 他的博客。
  • 使用 MOXy 实现让您的 JAXB 更干净- 另一篇有用的文章,其中包含一个很好的示例,概述了 EclipseLink MOXy 的优势。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 XML 映射到 Java 中的对象 的相关文章

随机推荐

  • Spark 结构化流的内存问题

    我在 Spark 2 2 0 中运行具有聚合和分区的结构化流时遇到内存问题 session readStream schema inputSchema option OPTION KEY DELIMITER OPTION VALUE DEL
  • 创建一个“机器人”来填写表单中的一些页面

    我想实现一个可以自动填写表格的 机器人 例如 当您可以在页面上填充数据时 是否有解决方案 form1 html并提交 等待下一页并提交数据form2 html 等等 最后 它还应该 单击 按钮来获取表单创建的文件 我希望这个 机器人 会使用
  • 在 Matlab 中将 unicode 字符串写入文件

    我有一个包含乌尔都语字符的字符串 例如 巴扎 这是一个 1x4 数组 我想将其保存到一个文件中 以便外部查看 虽然该字符串不会显示在主命令行窗口中 但变量 str 确实保存了它 当我使用 fprintf fid str 保存该文件并在记事本
  • MediaPlayer 停止播放声音 - Android

    这是一个简单的钢琴应用程序 它可以工作 但有一个问题 在大约 20 次点击后 有时恰好是 28 次点击 即使我点击按钮 它也不会发出任何声音 该应用程序不会崩溃 也不会警告我任何事情 这只是一无所有 没有声音 你有什么主意吗 package
  • Boto3 仅获取特定区域的 S3 存储桶

    以下代码遗憾地列出了所有区域的所有存储桶 而不仅仅是指定的 eu west 1 我怎样才能改变这一点 import boto3 s3 boto3 client s3 region name eu west 1 for bucket in s
  • 自己颁发 JWT 令牌与使用 IdentityServer4(OIDC) 进行 Web API

    https identityserver4 readthedocs io en release intro support html 我目前在我的 Web api 中自己发行令牌JwtSecurityToken我使用标准 ASP NET C
  • 如何从 DataView 的列中获取值?

    我有一个数据视图定义为 DataView dvPricing historicalPricing GetAuctionData DefaultView 这是我尝试过的 但它返回名称 而不是列中的值 dvPricing ToTable Col
  • SQLAlchemy 可以自动从数据库模式创建关系吗?

    从带有外键的现有 SQLite 数据库开始 SQLAlchemy 可以自动构建关系 SQLAlchemy 类是通过自动创建的 table args autoload True 目标是轻松访问相关表中的数据 而无需手动一一添加所有关系 即不使
  • 为什么此代码会导致 Excel 无法正常关闭?

    为什么这行代码会导致Excel无法退出 Excel Range range Excel Range ws Cells 1 1 如果是因为转换的原因 那么这段代码不会导致同样的问题吗 Excel Worksheet ws Excel Work
  • 使用 LINQ 的多个或单个存储库

    我一直在阅读 Professional ASP NET MVC 1 0 书中的第 11 章 可测试设计模式 在本章的示例中 数据访问被分为多个存储库 IOrderRepository IProductRepository 等 这一切都有意义
  • 谷歌地理编码停止为乌克兰克里米亚工作

    我发现了一个非常奇怪的问题 地理编码 API 突然停止支持克里米亚坐标 示例 辛菲罗波尔市 但它适用于乌克兰和俄罗斯的任何其他地方 示例 乌克兰基辅 最近API运行正常 请教一下 是不是因为乌克兰的政治事件而对谷歌进行了限制 该服务是否应该
  • 如何在 Vue Router v4 中为自定义元字段声明 TypeScript 类型接口?

    With Vue 路由器版本 4 目前是在 vue router next repo 的 beta 11 中 有一个文档页 about 如何使用 TypeScript 定义元字段自定义类型接口 declare module vue rout
  • 如何比较 C 中的多字节字符

    我尝试解析文本并在其中找到一些字符 我使用下面的代码 它适用于普通字符 例如abcdef但它不适用于 GCC 给出编译警告 我应该做什么来工作 Code include
  • HTTP 与 Websockets 的开销对比

    我正在两端使用 node js 构建一个文件同步程序 与 Dropbox 不同 我需要有潜在的数千个客户端同时请求数据 这是我当前的系统 服务器通过 websocket 向客户端推送通知 文件已更新 客户端对下载进行排队并在空闲时发出 HT
  • 回形针和 xhr.sendAsBinary

    我使用回形针将文件添加到我的模型中 我想使用firefox 3 6的新功能 xhr sendAsBinary 通过 ajax 请求发送文件 以下是我如何构建我的请求 var xhr new XMLHttpRequest xhr open P
  • JWT 中的复杂声明

    The JWT RFC包含复杂数组似乎没有任何问题 例如 email email protected businesses businessId 1 businessName One roles admin accountant busin
  • 将 swift 可变参数公开给 Objective-C

    我目前正在开发一个快速动态框架 它将用于 Objective C 应用程序 我创建了这个方法 签名 public init buttons ActionButton code 然而 这个方法永远无法从使用该框架的 Objective C 应
  • 如何检查 Java 代码的汇编输出?

    我发现这个问题可以回答 C 的问题 如何从 gcc 中的 C C 源代码获取汇编程序输出 Java uses both bytecode and assembly language machine code It s a two step
  • 将参数从刚刚单击的 添加到 URL

    该场景是很多 html 文件 它们之间有很多链接 当我调用其中第一个 它将是索引 时 链接通过 URL 传递几个参数 我们可以将它们称为首选项 现在我希望 当单击页面的几个链接中的任何一个时 将添加这些参数 所以这个问题与其他问题类似 如何
  • 将 XML 映射到 Java 中的对象

    假设我有一个名为Test 像这样 public class Test private String testId private String description private String department public Tes