从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

    • JavaEE 概念

    • Ant

    • Maven

    • 日志

    • Junit

    • JDBC

    • XML 和 JSON

      • 什么是 XML
        • 在 XML 出现之前
        • 什么是 XML
        • XML 的结构
        • DTD
      • 解析 XML 的方式
      • 使用 Jackson 解析 XML
      • JSON
      • 小结
  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java
  • JavaEE
  • XML 和 JSON
2023-04-17
目录

什么是 XML

# 00.什么是 XML

XML 是传输数据的一种重要的格式

# 在 XML 出现之前

在互联网中,我们经常需要传输数据。例如,我们自己的系统要给另一个系统传输用户信息,包含用户姓名,年龄,性别……等数据,那么怎么约定数据呢?

我们可以用约定好数据的先后顺序(例如姓名是第一个,年龄第二个),然后用 csv 的格式(csv 就是用逗号分割各个数据项)传送:

晓林,18,男……
1

‍ 看上去好像也没什么问题,可以正常使用。但实际上当数据多起来后:

晓林,18,男,唱跳rap篮球music,薯条,雷姆,计算机……
1

看着上面的数据,你是否不知道后面几个数据的含义?这样传送数据缺点如下:

  • 当数据项多了,光看数据很难知道每个数据项的含义,得对着约定好的顺序来看
  • 当要增加和删除某个数据项,都得修改相应的代码,数据项多了也容易改漏之类的
  • 其他系统可能不知道你这个约定,例如换一个系统,它就不知道你这个约定了,如果要接受数据,还得重新开发代码来按照你的约定来解析这个数据。

有没什么办法可以让数据看起来更方便,并且能在各个系统之间传输呢?

有的,为了解决“让大家都明白这是什么数据”的问题,1986 年国际标准化组织发布了一个信息管理方面的国际标准(ISO 8879:1986 信息处理),也就是标准通用标记语言,Standard Generalized Markup language,简称 SGML,就是计算机的文本结构和描述内容的国际标准语言。

字面意思其实就可以理解:标记语言是标准通用的,只要你按照这个标准,甭管是哪台计算机,都遵循一个规范,这样就“听”得懂你说的啥,也就能顺利解析该数据了

XML 就是实现了这个标准的一种语言,并且在早期非常流行 ‍

# 什么是 XML

XML 全称可扩展标记语言(eXtensible Markup Language),被设计用来显示、传输和存储数据。我们来看一个最简单的 XML 例子:

<username>晓林</username>
<age>18</age>
<sex>男</sex>
<hobby>唱跳rap篮球music</hobby>
<food>薯条</food>
<wife>雷姆</wife>
<study>计算机</study>
1
2
3
4
5
6
7

‍ XML 是一种语言,所以是基于文本的(不是通过二进制的格式来处理数据)

XML 是标记语言,什么是标记呢?就是我们可以给一个数据,做个标记,例如我们用 <username> 这个标签,来说明后面的数据线 晓林 是用户名(username 的中文)。

就好比我们读书的时候,对于重点部分可以用笔画一个下划线,这也是一种打标记。 ‍

# XML 的结构

XML 有固定的结构:

  1. 首行必定是 <?xml version="1.0"?>,可以加上可选的编码。
  2. 紧接着,如果以类似 <!DOCTYPE note SYSTEM "book.dtd"> 声明的是文档定义类型(DTD:Document Type Definition),DTD 是可选的。后续会详细讲解。
  3. 接下来是 XML 的文档内容,一个 XML 文档有且仅有一个根元素,根元素可以包含任意个子元素。
  4. 元素可以包含属性,例如,<isbn lang="CN">1234567</isbn> 包含一个属性 lang="CN",
  5. 如果是空元素,可以用 <tag/> 表示。 ‍ 例如,这是一个 XML 的例子:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE note SYSTEM "book.dtd">
<book id="1">
    <name>Java核心技术</name>
    <author>Cay S. Horstmann</author>
    <isbn lang="CN">1234567</isbn>
    <tags>
        <tag>Java</tag>
        <tag>Network</tag>
    </tags>
    <pubDate/>
</book>
1
2
3
4
5
6
7
8
9
10
11
12

‍ 由于使用了 <、> 以及引号等标识符,如果内容出现了特殊符号,则需要转义。例如,Java<tm> 必须写成:

<name>Java&lt;tm&gt;</name>
1

‍ 常见的特殊字符如下:

字符 转义表示
< &lt;
> &gt;
& &amp;
" &quot;
' &apos

‍ XML 有几个特点:一是纯文本,默认使用 UTF-8 编码,二是可嵌套,适合表示结构化数据。如果把 XML 内容存为文件,那么它就是一个 XML 文件,例如 book.xml。

# DTD

DTD,全称 Document Type Definition,我们可以认为里面定义了很多规则,而 XML 文件必须遵守这些规则。例如,DTD 制订了如下规则:

  • 根元素必须是 book
  • book 元素必须包含 name,author 等指定元素
  • isbn 元素必须包含属性 lang
  • ...............

这个规则是数据的发送方和使用方都会遵守的规则,如果我们没有按照 DTD 的规则来书写 XML 文件,那么就有可能会发生错误,例如发送方写错了一个标签名,导致接收方解析不了。

例如,我们后续学习 JavaWeb 开发的时候,有一个 web.xml 文件:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
</web-app>
1
2
3
4
5
6
7

可以看到其定义了一个 dtd,其部分内容如下:

‍

可以看到其有一个元素叫做 servlet-mapping,也就是说我们可以在 web.xml 里写这个标签,而且里面应该包含标签 url-pattern ‍

上次更新: 2025/6/3 09:31:54
JDBCTemplate
解析 XML 的方式

← JDBCTemplate 解析 XML 的方式→

最近更新
01
语雀文档一键下载至本地教程
07-04
02
要成功,就不要低估环境对你的影响
07-03
03
血泪教训:电子设备要定期开机
07-02
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式