一.什么是XML
XML(eXtensible Makeup Language,可扩展标记语言),它被设计为具有自我描述性,意思是数据本身会携带关于其结构的信息。
可以把它想象成一种即能被人读懂,也能被机器解析的"数据容器"
二.核心特点
1.可扩展性
与HTML有固定的标签(如<p>,<img>等)不同,XML没有预定义标签,你可以根据自己需求定义自己的标签。
2.自我性描述
标签的名字通常描述了数据的含义
3.纯文本
XML是纯文本文件,不依赖于任何的软件或硬件,这使得它在不同的系统之间交换数据非常方便
4.平台和语言无关
无论是Windows、Linux、macOS、还是用Java,Python,C#等编程语言,都有标准的库来解析XML,这使得它成为跨平台数据交换的理想选择
三.一个简单的XML的例子
假设我们要描述一本书的信息,用XML可以这样写
XML
<?xml version="1.0" encoding="UTF-8"?>
<图书>
<书名>XML从入门到精通</书名>
<作者>张三</作者>
<价格 货币="人民币">59.90</价格>
<出版信息>
<出版社>电子工业出版社</出版社>
<出版年份>2023</出版年份>
</出版信息>
</图书>
结构分析:
-
<?xml ... ?>: XML声明,定义了XML的版本和字符编码。 -
<图书>: 根元素,每个XML文档必须有且只有一个根元素。 -
<书名>、<作者>等: 元素,是文档的基本构建块。 -
</书名>: 结束标签,每个开始标签必须有对应的结束标签。 -
货币="人民币": 属性,用于描述元素的额外信息。 -
<出版信息>: 嵌套的子元素,展示了数据的层次结构。
四、XML的主要用途
-
数据存储与传输
-
在早期和现在的一些系统中,XML常被用作配置文件(如Java的Spring框架、服务的配置)。
-
在网络中(尤其是Web服务,如SOAP协议),XML曾是数据交换的主要格式。
-
-
作为其他标记语言的基础
-
HTML: 用于定义网页内容。
-
RSS: 用于新闻订阅和博客摘要。
-
SVG: 用于描述矢量图形。
-
Office Open XML: Microsoft Office(.docx, .xlsx)文档的底层格式。
-
KML: Google Earth等地理信息系统使用的格式。
-
五、XML与JSON的对比
在现代Web开发中,JSON 已经很大程度上取代了XML,成为数据交换的首选格式。以下是它们的简单对比:
| 特性 | XML | JSON |
|---|---|---|
| 可读性 | 很好,结构清晰 | 很好,更简洁 |
| 体积 | 相对较大(标签冗余) | 相对较小(无结束标签) |
| 解析速度 | 相对较慢(DOM解析较复杂) | 相对较快(可直接转为JavaScript对象) |
| 数据模型 | 树形结构,支持属性、注释等 | 键值对、数组,更贴近编程语言的数据结构 |
| 扩展性 | 强,通过Schema定义 | 较弱,但通常够用 |
为什么JSON更流行?
JSON源自JavaScript,与Web前端天生契合,解析非常简单(JSON.parse()),且格式更紧凑,这使得它在网络传输中效率更高。
六、XML相关技术
要完整地使用XML,通常会涉及到以下技术:
-
DTD: 文档类型定义,一种较早的用于定义XML文档结构的方式。
-
XSD: XML Schema Definition,比DTD更强大、更常用的XML结构定义语言,支持数据类型。
-
XPath: 一种在XML文档中查找信息的语言(类似于文件路径)。
-
XSLT: 一种用于将XML文档转换为其他格式(如HTML、PDF或其他XML)的语言。
七.总结
XML是一种强大、灵活且标准化的数据描述语言。 虽然在新项目中,JSON可能因其轻量和易用性而更受欢迎,但XML在配置文件、文档格式和企业级应用集成等领域依然占据着重要地位,是每一位开发者都应该了解的基础技术。
简单来说:
-
想存数据或做配置? XML是个可靠的选择。
-
想为Web API传输数据? 优先考虑JSON。
一、基本语法结构
1. XML声明(可选但推荐)
xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-
version: XML版本,通常是1.0
-
encoding: 字符编码,如UTF-8、GB2312等
-
standalone: 文档是否独立("yes"或"no")
2. 元素(Elements)
元素是XML的基本构建块,由开始标签、内容和结束标签组成。
xml
<书名>XML入门教程</书名>
空元素的两种写法:
xml
<br></br>
<!-- 或更简洁的写法 -->
<br/>
3. 根元素(Root Element)
每个XML文档必须有且只有一个根元素,所有其他元素都嵌套在其中。
xml
<!-- 正确示例 -->
<图书馆>
<书>...</书>
<书>...</书>
</图书馆>
<!-- 错误示例 -->
<书>...</书>
<书>...</书>
二、语法规则详解
1. 标签规则
-
必须闭合:每个开始标签必须有对应的结束标签
-
大小写敏感 :
<Book>和<book>是不同的标签 -
正确嵌套:子元素必须完全包含在父元素内
xml
<!-- 正确嵌套 -->
<作者>
<姓名>张三</姓名>
</作者>
<!-- 错误嵌套 -->
<作者>
<姓名>张三
</作者>
</姓名>
2. 属性(Attributes)
属性提供元素的额外信息,必须放在引号中。
xml
<图书 类别="技术" 语言="中文" 版本="2.0">
<标题>XML完全指南</标题>
</图书>
属性 vs 子元素:
xml
<!-- 使用属性 -->
<学生 学号="2023001" 班级="三年级二班">李四</学生>
<!-- 使用子元素 -->
<学生>
<学号>2023001</学号>
<班级>三年级二班</班级>
<姓名>李四</姓名>
</学生>
3. 注释
xml
<!-- 这是一个注释 -->
<数据>
<项目>内容</项目> <!-- 行内注释 -->
</data>
注释不能嵌套:
xml
<!-- 外层注释
<!-- 内层注释 --> 这是错误的!
-->
三、特殊字符处理
XML中有5个预定义的实体引用:
| 字符 | 实体引用 | 说明 |
|---|---|---|
< |
< |
小于号 |
> |
> |
大于号 |
& |
& |
和号 |
' |
' |
单引号 |
" |
" |
双引号 |
xml
<表达式>a < b && c > d</表达式>
<引用>他说:"Hello 'World'"</引用>
使用CDATA节
当文本中包含大量特殊字符时,使用CDATA节更方便:
xml
<代码示例>
<![CDATA[
if (a < b && c > d) {
printf("Hello <World>");
}
]]>
</代码示例>
四、命名规则
XML元素和属性名称必须遵循以下规则:
-
可以包含字母、数字、连字符、下划线、点号
-
不能以数字或标点符号开头
-
不能以"xml"(任何大小写)开头
-
不能包含空格
xml
<!-- 合法的名称 -->
<book-title />
<图书_信息 />
<chapter1.2 />
<!-- 不合法的名称 -->
<123book /> <!-- 以数字开头 -->
<book title /> <!-- 包含空格 -->
<xml-document /> <!-- 以xml开头 -->
五、完整的XML文档示例
xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 学生信息数据库 -->
<学生列表 创建日期="2024-01-20">
<学生 学号="S001">
<个人信息>
<姓名>王小明</姓名>
<性别>男</性别>
<年龄>20</年龄>
</个人信息>
<成绩>
<数学>95</数学>
<英语>88</英语>
<编程>92</编程>
</成绩>
<备注><![CDATA[该生表现优秀,在<编程竞赛>中获得一等奖]]></备注>
</学生>
<学生 学号="S002">
<个人信息>
<姓名>李小红</姓名>
<性别>女</性别>
<年龄>19</年龄>
</个人信息>
<成绩>
<数学>85</数学>
<英语>95</英语>
<编程>90</编程>
</成绩>
<备注>学习努力,英语成绩突出</备注>
</学生>
</学生列表>
六、常见错误与验证
格式良好的XML必须满足:
-
✅ 有且只有一个根元素
-
✅ 所有标签正确闭合
-
✅ 元素正确嵌套
-
✅ 属性值使用引号
-
✅ 特殊字符正确转义
-
✅ 标签名称合法
验证工具:
-
使用浏览器的开发者工具
-
在线XML验证器
-
代码编辑器的XML插件(如VS Code的XML扩展)
掌握这些语法规则后,你就能创建出结构清晰、格式正确的XML文档了。记住,XML的核心价值在于它的严格性,这确保了数据的一致性和可解析性。