XML的了解
一.什么是XML
XML(eXtensible Makeup Language,可扩展标记语言),它被设计为具有自我描述性,意思是数据本身会携带关于其结构的信息。
可以把它想象成一种即能被人读懂,也能被机器解析的“数据容器”
二.核心特点
1.可扩展性
与HTML有固定的标签(如<p>,<img>等)不同,XML没有预定义标签,你可以根据自己需求定义自己的标签。
2.自我性描述
标签的名字通常描述了数据的含义
3.纯文本
XML是纯文本文件,不依赖于任何的软件或硬件,这使得它在不同的系统之间交换数据非常方便
4.平台和语言无关
无论是Windows、Linux、macOS、还是用Java,Python,C#等编程语言,都有标准的库来解析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的核心价值在于它的严格性,这确保了数据的一致性和可解析性。
