XML全称为可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言,它设计的初衷是传输和存储数据,而不是像HTML那样用于展示数据。XML的标签没有被预定义,用户可以根据需求自定义标签,这让它的灵活性非常高,在跨平台数据交换、配置文件存储、文档结构化描述等场景都有大量应用。

XML的核心特点
- 可扩展性:没有预定义的标签,开发者可以根据业务需求自定义标签名称,比如可以定义<user>、<order>这类和业务相关的标签。
- 自描述性:XML的结构和内容都包含在标签中,即使没有额外的文档说明,也能大致理解数据代表的含义。
- 平台无关性:XML是基于文本的纯字符数据,几乎所有编程语言和操作系统都支持解析XML,非常适合跨平台数据交互。
- 严格语法:XML对语法的要求比HTML严格很多,标签必须正确嵌套、闭合,属性值必须用引号包裹,否则解析会报错。
XML和HTML的区别
很多人容易混淆XML和HTML,两者虽然都是标记语言,但设计目标和用法有很大差异,具体对比如下:
| 对比项 | XML | HTML |
|---|---|---|
| 设计目标 | 传输和存储数据 | 展示数据 |
| 标签定义 | 可自定义标签 | 预定义标签,不能自定义 |
| 语法要求 | 语法严格,必须正确闭合、嵌套 | 语法宽松,部分标签可以省略闭合 |
| 关注重点 | 数据的内容和结构 | 数据的展示样式 |
XML的基本语法规则
1. 必须有声明头
XML文档开头通常需要声明XML的版本和编码,格式如下:
<?xml version="1.0" encoding="UTF-8"?>
其中version是XML的版本,目前主流是1.0版本,encoding指定文档的编码格式,常用的是UTF-8。
2. 必须有且仅有一个根元素
XML文档所有的内容都必须包含在唯一的根元素内部,根元素是所有其他元素的父元素,比如下面的示例中<users>就是根元素:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<name>张三</name>
<age>25</age>
</user>
</users>
3. 标签必须正确闭合
XML中所有标签都必须有对应的闭合标签,要么写成<tag></tag>的形式,要么写成自闭合标签<tag/>,不能像HTML那样省略闭合标签。
4. 标签必须正确嵌套
标签的嵌套必须符合层级关系,不能交叉嵌套,比如下面的写法是错误的:
<!-- 错误示例:标签交叉嵌套 -->
<user>
<name>张三</age>
</user>
正确的嵌套应该是:
<user>
<name>张三</name>
<age>25</age>
</user>
5. 属性值必须用引号包裹
XML元素的属性值必须用单引号或者双引号包裹,不能省略引号,比如:
<user id="1001">
<name>张三</name>
</user>
简单的XML解析示例
以Python为例,使用内置的xml.etree.ElementTree模块可以很方便地解析XML内容,下面是一个简单的解析示例:
import xml.etree.ElementTree as ET
# 定义xml字符串
xml_str = '''<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1001">
<name>张三</name>
<age>25</age>
</user>
<user id="1002">
<name>李四</name>
<age>28</age>
</user>
</users>'''
# 解析xml字符串
root = ET.fromstring(xml_str)
# 遍历所有user节点
for user in root.findall('user'):
user_id = user.get('id')
name = user.find('name').text
age = user.find('age').text
print(f"用户ID:{user_id},姓名:{name},年龄:{age}")
运行上面的代码,会输出两个用户的基本信息,通过简单的几行代码就可以完成XML数据的读取。
XML的常见应用场景
- 配置文件:很多软件、框架的配置文件都采用XML格式,比如早期的Java Web项目的web.xml配置,Spring框架的XML配置等。
- 数据交换:在前后端交互、不同系统之间的数据传输中,XML可以作为统一的数据格式,保证不同平台都能正确解析。
- 文档存储:Office的Word、Excel文档(.docx、.xlsx格式)底层就是基于XML的结构化存储,还有SVG矢量图也是XML的一种应用。
掌握XML的基础知识后,你可以根据实际需求尝试编写简单的XML文件,或者练习使用对应编程语言的XML解析库,进一步熟悉XML的使用方法。