Extensible Markup Language 可扩展标记语言[XML]
视频资料参考自:https://www.bilibili.com/video/BV1B441117Lu?p=186
其他参考:https://www.w3school.com.cn/xml/index.asp
特点:
可扩展,标签可自定义
功能:
和HTML大同小异,CSS一样能对XML起效
但是现在XML的职能主要用于存储数据和作为配置文件使用
在网络中传输数据
XML & HTML的区别?
1、XML标签自定义,HTML是预定义的
2、XML语法严格,HTML语法并不强制要求
3、XML用来存储数据、HTML用来展示数据
XML基本语法:
<?xml version="1.0" encoding="UTF-8" ?> <users> <user id = "1"> <name>杰哥</name> <age>28</age> <gender>男</gender> </user> <user id = "1"> <name>阿伟</name> <age>23</age> <gender>男</gender> </user> </users>
可以被浏览器打开解析
- 1、文件后缀名必须是.xml
- 2、文件的第一行必须定义文档声明,必须是在顶格的位置,不可以挪动到其他行【<?xml version="1.0" encoding="UTF-8" ?>】
- 3、文件有且仅有一个根标签 Root Tag
- 4、标签的属性必须用引号修饰【单引双引都可以】
- 5、不是自闭和标签的情况下,成对标签必须要有结束标签
- 6、标签名是区分大小写的!
XML的组成部分:
- 1、文档声明
格式:<?xml 属性列表 ?>
属性列表:
version 版本号 1.0 必须属性
encoding 字符集&编码方式 UTF-8 告知解析引擎当前文档使用的字符集【默认ISO-8859-1】
standalone 是否独立 yes/no yes不依赖其他约束文件,no依赖【即使配置了yes还是可以依赖】
- 2、指令
可以结合CSS对标签设置样式 <?xml stylesheet typr = "text/css" href = "a.css" ?>
- 3、标签:标签名称自定义
1、不可以数字开头作为首标识符
2、包含字母、数字、下划线或者其他字符
3、不能包含空格
4、不能以XML、Xml、xml开始作为首标识符
- 4、属性
id的属性值必须唯一,等同HTML的id属性
- 5、文本
CDATA区域:该区域的数据会被原样展示
<![CDATA[ a < b ? true or false ]]>
XML的约束 DTD & Schema:
什么是约束,即规定XML的书写规则
目标:
- 能够在xml文件中引入约束
- 能够简单的读懂文档
约束的分类:
- DTD约束,一种简单的约束规范
- Schema约束,以种复杂的约束规范
- 1、DTD约束:
我们声明了一个DTD的约束文档【Student.dtd】
<!-- !ELEMENT 规定XML文档中的标签元素 --> <!-- students 声明了一个标签,标签名是students --> <!-- students标签声名,可允许放置(0~N)个子标签student --> <!-- *表示任意个数 +表示一个以上 --> <!ELEMENT students (student*)> <!-- 声明student标签 且可放置三个子标签,分别是name,age,gender。 --> <!-- 这些子标签没有加量词通配符,所以每个子标签在xml必须出现一次(有且仅有一次) --> <!-- 这些子标签出现的顺序也要和这个声明的顺序一致 --> <!ELEMENT student (name,age,gender)> <!-- (#PCDATA) 声明这些标签的元素内容只能是字符串了 --> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT gender (#PCDATA)> <!-- !ATTLIST声明了一个属性 给student声明的 --> <!-- 属性名称是number 属性的类型是ID #REQUIRED表示此属性是必填项 --> <!-- ID属性表示每一个标签的ID值是唯一的,不可重复 --> <!ATTLIST student number ID #REQUIRED>
在XML文件中引入此约束,外部dtd文件引入【Student.xml】
<?xml version="1.0" encoding="UTF-8" ?> <!-- 本地dtd文件引入 --> <!-- !DOCTYPE 文档声明 --> <!-- students表示根标签名 --> <!-- SYSTEM 在本地中获取--> <!-- "Student.dtd" 表示引入的dtd文件位置 --> <!DOCTYPE students SYSTEM "Student.dtd"> <!-- 网络外部 dtd引入 --> <!-- <!DOCTYPE 根标签名 PUBLIC "dtd文件名" "dtd文件的URL位置"> --> <students> <student number="S001"> <name>杰哥</name> <age>29</age> <gender>male</gender> </student> <student number="S002"> <name>阿伟</name> <age>18</age> <gender>male</gender> </student> </students>
使用内部引入dtd约束
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE students[ <!ELEMENT students (student*)> <!ELEMENT student (name,age,gender)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT gender (#PCDATA)> <!ATTLIST student number ID #REQUIRED> ]> <students> <student number="S001"> <name>杰哥</name> <age>29</age> <gender>male</gender> </student> <student number="S002"> <name>阿伟</name> <age>18</age> <gender>male</gender> </student> </students>
- 2、Schema约束:
https://www.w3school.com.cn/schema/index.asp
- Schema约束文件的后缀名是.xsd
- 一般不用自己手写Schema
只需要看懂和会引入约束 https://www.w3school.com.cn/schema/schema_howto.asp
XML的解析方式:
1、DOM 【解析思想?服务器】
将xml文档一次性加载进内存,在内存中解析出一个DOM树,每一个标签既是一个节点【node】
操作方便快速、可进行CRUD操作、但是xml内容过多,非常占用内存资源
2、SAX 【解析思想?客户端】
逐行读取、基于事件驱动,相比DOM是不占用内存资源的
功能有限,仅读取,不能增删改