XML 详细介绍

IT 技术 10 阅读 更新于 2026-10-14 15:54

XML 详细介绍

XML(Extensible Markup Language,可扩展标记语言),由 W3C 制定,是一种标记语言,用于存储、传输、描述结构化数据。

核心定位:不是用来展示页面(HTML 是展示),而是用来承载数据。

一、XML 与 HTML 的区别

特性XMLHTML
目的描述数据、存储/传输数据展示网页内容
标签标签自定义,可自己造标签标签是预定义固定的(<div> <p>)
大小写区分大小写不区分
语法语法严格,必须闭合、格式正确语法宽松,很多标签可省略闭合
扩展性可无限扩展标签标签固定,不能自定义

示例直观对比:

<!-- XML:描述学生数据 -->
<student>
    <name>张三</name>
    <age>18</age>
</student>
<!-- HTML:展示内容 -->
<div>
    <p>张三,18岁</p>
</div>

二、XML 基础语法规则(强制要求)

  1. XML 文档必须有根节点:所有元素包裹在一个根标签内,有且仅有一个根。
  2. 所有标签必须闭合:开始标签必须有结束标签;自闭合标签必须加 /```
3. **大小写敏感**:`<Name>` 和 `<name>` 是两个不同标签。
4. **标签必须正确嵌套**,不能交叉嵌套
✅ 正确:`<a><b></b></a>`
❌ 错误:`<a><b></a></b>`
5. **属性值必须加引号**(单引号/双引号均可)
✅ `<person id="1001"/>`
❌ `<person id=1001/>`
6. **特殊字符必须转义**| 原字符 | 转义实体 | 含义 |
| --- | --- | --- |
| & | `&amp;` | 和 |
| < | `&lt;` | 小于 |
| > | `&gt;` | 大于 |
| " | `&quot;` | 双引号 |
| ' | `&apos;` | 单引号 |

> 
> 如果文本里大量特殊符号,可以使用 **CDATA** 块,内部内容不解析:

<name>张三</name> <!-- 成对闭合 -->
<img /> <!-- 自闭合,不能写成 <img> -->

3. **大小写敏感**:`<Name>` 和 `<name>` 是两个不同标签。
4. **标签必须正确嵌套**,不能交叉嵌套
✅ 正确:`<a><b></b></a>`
❌ 错误:`<a><b></a></b>`
5. **属性值必须加引号**(单引号/双引号均可)
✅ `<person id="1001"/>`
❌ `<person id=1001/>`
6. **特殊字符必须转义**| 原字符 | 转义实体 | 含义 |
| --- | --- | --- |
| & | `&amp;` | 和 |
| < | `&lt;` | 小于 |
| > | `&gt;` | 大于 |
| " | `&quot;` | 双引号 |
| ' | `&apos;` | 单引号 |

> 
> 如果文本里大量特殊符号,可以使用 **CDATA** 块,内部内容不解析:

## 三、XML 文档结构

完整 XML 文件一般由:**声明 + 根元素 + 子元素 + 属性 + 文本**组成。

<content><![CDATA[1<2 && 3>1]]></content>


## 三、XML 文档结构

完整 XML 文件一般由:**声明 + 根元素 + 子元素 + 属性 + 文本**组成。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- 上面这行:XML声明,可选,建议写在第一行,不能有前置空格 -->
<!-- version:版本,只有1.0和1.1,最常用1.0 -->
<!-- encoding:编码,中文一般UTF-8 / GB2312 -->
<!-- standalone:yes/no,是否依赖外部DTD -->


### 元素、属性概念

- **元素(Element)**:`<book></book>` 整体叫元素;`<title>` 是子元素
- **属性(Attribute)**:写在开始标签内,用来描述元素信息,`id="b001"`> 
> 设计取舍:
> 
> 
> - 简短元信息适合放**属性**
> - 长文本、多段内容适合作为**子元素**

## 四、XML 文档校验:DTD / XSD

XML 默认只是语法正确(格式良好 well-formed);
如果要**约束文档结构(规定必须有哪些标签、类型、顺序)**,就要用 DTD 或 XSD。

### 1. DTD(Document Type Definition,文档类型定义)

比较老,语法简单,**不支持数据类型**,只能约束结构。

<books> <!-- 根节点 -->
<book id="b001"> <!-- book元素,id是属性 -->
<title>XML入门</title> <!-- 子元素,文本内容:XML入门 -->
<author>李四</author>
<price>59.00</price>
</book>
</books>


### 元素、属性概念

- **元素(Element)**:`<book></book>` 整体叫元素;`<title>` 是子元素
- **属性(Attribute)**:写在开始标签内,用来描述元素信息,`id="b001"`> 
> 设计取舍:
> 
> 
> - 简短元信息适合放**属性**
> - 长文本、多段内容适合作为**子元素**

## 四、XML 文档校验:DTD / XSD

XML 默认只是语法正确(格式良好 well-formed);
如果要**约束文档结构(规定必须有哪些标签、类型、顺序)**,就要用 DTD 或 XSD。

### 1. DTD(Document Type Definition,文档类型定义)

比较老,语法简单,**不支持数据类型**,只能约束结构。
<!-- 内部DTD示例 -->

### 2. XSD / XML Schema(推荐替代DTD) W3C标准,**支持丰富数据类型(数字、日期、字符串)**,支持命名空间,企业项目最常用。后缀 `.xsd` 可以定义:标签顺序、字段类型、长度、必填/可选。 > > 两个概念区分: > > > - **Well-Formed(格式良好)**:语法满足XML基础规则,标签闭合嵌套正确 > - **Valid(有效)**:格式良好,同时符合DTD/XSD约束 ## 五、命名空间 Namespace(xmlns) XML 允许自定义标签,当合并多份XML时,标签名冲突(都有`<table>`,一个是表格、一个是桌子),用命名空间区分。

<!ELEMENT books (book+)>
<!ELEMENT book (title,author)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ATTLIST book id CDATA #REQUIRED>
]>


### 2. XSD / XML Schema(推荐替代DTD)

W3C标准,**支持丰富数据类型(数字、日期、字符串)**,支持命名空间,企业项目最常用。后缀 `.xsd`
可以定义:标签顺序、字段类型、长度、必填/可选。

> 
> 两个概念区分:
> 
> 
> - **Well-Formed(格式良好)**:语法满足XML基础规则,标签闭合嵌套正确
> - **Valid(有效)**:格式良好,同时符合DTD/XSD约束

## 五、命名空间 Namespace(xmlns)

XML 允许自定义标签,当合并多份XML时,标签名冲突(都有`<table>`,一个是表格、一个是桌子),用命名空间区分。
网页表格

<root xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:my="http://demo.com/xml">

网页表格

<my:table>木桌子</my:table>
</root>
```

  • xmlns:前缀="URI":声明命名空间
  • URI只是唯一标识,不一定是可访问网址

六、XML 常用解析方式(程序读取XML)

  1. DOM(Document Object Model)

一次性把整个XML加载到内存,构建树形对象;支持增删改查。适合小文件,大文件耗内存。

  1. SAX(Simple API for XML)

事件驱动,边读边解析,不加载全部文档;只读,不能修改,适合超大XML。

  1. StAX:流式解析,介于DOM和SAX之间,Java常用。
  2. JDOM / DOM4J:Java封装库,简化DOM操作。

七、XML 的优缺点

✅ 优点

  1. 纯文本格式,跨平台、跨语言,可读性好
  2. 自描述,标签语义清晰
  3. 支持校验(XSD/DTD),数据结构规范
  4. 支持命名空间,可组合多个文档

❌ 缺点

  1. 冗余大,标签多,传输体积大(对比JSON)
  2. 解析相对复杂,代码量比JSON多
  3. 移动端、前后端接口现在大多被JSON替代

八、XML 典型应用场景

  1. 早期Web接口 WebService(SOAP):基于XML;现在RESTful JSON为主
  2. 配置文件:Maven pom.xml、Spring、MyBatis、Android 旧版布局文件
  3. Office文档底层:docx、xlsx本质是压缩包,内部由一堆XML组成(OOXML)
  4. RSS订阅、SVG矢量图(SVG本身就是XML)
  5. 数据交换:异构系统之间(银行、政务系统很多保留XML报文)

九、XML vs JSON 简单对比

项目XMLJSON
可读性良好,标签多简洁,更轻量
数据体积大,冗余小
解析难度复杂简单
数据类型XSD支持类型,原生文本原生支持数字、布尔、null
使用场景配置、SOAP、传统政务/金融前后端接口、现代应用

十、常用工具

  • 在线:XML格式化、校验、转JSON工具
  • 编辑器:VS Code(XML插件)、Notepad++
  • 命令行:xmllint(Linux,校验XML、XSD)

如果你需要,我可以继续:

  1. 写一份可直接运行的完整XML+XSD示例
  2. Python / Java 解析XML代码示例
  3. XML 转 JSON 原理和代码

你想要哪一部分?

← 返回IT 技术 yicool 百科 · XML 详细介绍

评论 0