XML全称为可扩展标记语言,和HTML同属标记语言,但两者的设计目标完全不同,很多开发者在初学阶段容易混淆两者的用途和语法规则,下面我们就来详细了解XML的作用和核心语法。

XML的核心作用
XML的设计初衷是为了传输和存储数据,而不是像HTML那样用来展示数据,它的可扩展性让它可以在很多场景发挥作用:
- 数据交换:不同系统、不同编程语言之间的数据传输,XML格式的结构化数据可以被各类解析器识别,比如早期的WebService接口就常用XML作为数据载体。
- 配置文件:很多框架和软件的配置信息会用XML存储,比如早期的Spring配置文件、Tomcat的server.xml,清晰的结构方便开发者修改和维护配置项。
- 内容管理:部分内容管理系统会用XML存储文章、页面等结构化内容,方便后续对不同终端的内容做适配和渲染。
XML的基础语法规范
1. 文档声明
每个标准的XML文档开头都需要有文档声明,用来标识文档的版本和编码信息,声明必须放在文档的第一行,前面不能有任何内容:
<?xml version="1.0" encoding="UTF-8"?>
其中version是必填项,目前最常用的版本是1.0,encoding用来指定文档的字符编码,避免中文等字符出现乱码。
2. 标签规则
XML的标签和HTML类似,但要求更严格:
- 标签必须成对出现,有开始标签就有对应的结束标签,比如<user>对应</user>,如果标签没有内容,可以写成自闭合形式<user/>。
- 标签名区分大小写,<User>和<user>是两个不同的标签。
- 标签名不能以数字、标点符号开头,不能包含空格,建议用有意义的英文单词命名,比如<student_name>。
- 标签必须正确嵌套,不能交叉嵌套,比如<a><b></a></b>就是错误的写法,正确写法是<a><b></b></a>。
3. 属性规则
XML标签可以携带属性,属性必须放在开始标签中,多个属性之间用空格分隔:
<user id="1001" type="vip">
<name>张三</name>
</user>需要注意的是,属性值必须用单引号或者双引号包裹,不能省略引号,同一个标签中不能有同名的属性。
4. 注释写法
XML的注释和HTML注释格式一致,用来添加说明文本,注释内容不会被解析器解析:
<!-- 这是用户信息的配置,id为1001的是VIP用户 -->
<user id="1001">
<name>张三</name>
</user>注释不能嵌套使用,也不能放在文档声明的前面。
5. 特殊字符处理
XML中有些字符有特殊的语法含义,如果需要在内容中使用这些字符,需要做转义处理,常见的转义对应如下:
| 特殊字符 | 转义后写法 | 说明 |
|---|---|---|
| < | < | 小于号,标签的开头符号 |
| > | > | 大于号,标签的结尾符号 |
| & | & | 与符号,转义字符的开头 |
| ' | ' | 单引号 |
| " | " | 双引号 |
如果需要大段的内容包含很多特殊字符,也可以使用CDATA段来包裹,CDATA段中的内容会被解析器当作纯文本处理,不需要逐个转义:
<content>
<![CDATA[
这是一段包含特殊字符的内容:a < b > c,&符号不需要转义
]]>
</content>6. 根元素要求
一个XML文档必须有且仅有一个根元素,所有其他元素都必须放在根元素内部,比如下面的写法就是错误的,因为有两个同级的顶层元素:
<?xml version="1.0" encoding="UTF-8"?> <user>张三</user> <user>李四</user>
正确的写法需要用一个根元素包裹所有内容:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>张三</user>
<user>李四</user>
</users>简单示例
下面是一个完整的用户配置XML示例,包含了上述提到的所有语法规则:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 用户列表配置文件 -->
<users>
<user id="1001" type="vip">
<name>张三</name>
<age>25</age>
<desc><![CDATA[用户标签:喜欢旅游,消费能力>5000元/月]]></desc>
</user>
<user id="1002" type="normal">
<name>李四</name>
<age>22</age>
<desc>新注册用户</desc>
</user>
</users>只要遵守上述语法规则,写出来的XML文档就能被各类解析器正确解析,不会出现格式错误的问题。