学习XML需要掌握的三个基本技能
- XML的概念
- XML的语法
- XML的解析
XML的概念
什么是XML:
- Extensible Markup Language 可扩展标记语言
- 可扩展:--->标签都是自定义的
XML的功能:
- 由于早期与HTML竞争不利,所以后面转向与
properties
竞争配置文件的使用率
<user id='1'>
<name>zhangsan</name>
<age>18</age>
</user>
- 用于存储数据,作为配置文件使用。
- 在网络中传输存储的数据--->XML是纯文本的,可以跨平台传输
XML与HTML的区别:
- HTML用于展示展示数据
- 语法不严谨
- 由浏览器解析
- 标签预定义好的
- XML用于存储、传输数据
- 语法非常严谨
- 格式要求标准
- 标签是自定义的
XML的语法
- 第一行必须定义为文档声明(第一行上方不能有空行等各种内容)
- 根标签(有且仅有一个)
- 标签内容(根标签和标签严格区分大小写)
- 后缀名是
".xml"
- 属性值必须使用引号引起(单双引号都可以)
- 标签必须正确关闭--->自闭和或者关闭标签
XML的组成部分:
- 文档声明
- 格式:
<?xml version="1.0" encoding="UTF-8"?>
- 属性列表:
- 版本号:
version
必须的属性 - 编码方式:
encoding
必须的属性,要和项目一致 - 是否独立:
standalone
--->基本不用了,大多数已经不设置了
- yes--->不依赖于其他约束文件
- no--->依赖于其他约束文件
- 指令:(结合Css的)
- 标签:标签名称自定义,但是遵循W3C的部分规则
- 不可以以数字或者标点符号开始
- 名称不能以字母(Xml、xml等)开始
- 名称不能包含空格
- 属性:
- 属性值引号引起
- 元素唯一标识--->约束
- 文本内容
- CDATA区:--->该区域中的数据会被原样展示(不需要写
<
等来代替大小于号)
<![CDATA[
for i := 0; i<len(arr); i++ {
fmt.Println(arr[i])
}
]]>
示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<?xml-stylesheet type="text/css" href="a.css" ?>
<!--第二行会把数据取出,展示成红颜色。限制XML已经不用于展示数据了-->
<user>
<name>Jun</name>
<age>22</age>
<gender>male</gender>
<br />
<name>Boy</name>
<age>18</age>
<gender>female</gender>
</user>
XML的约束
编写者:
- 作为配置文件--->软件的使用者编写配置文档
解析者:
- 软件本身去解析xml
对于框架使用者的XML要求:
- 引用约束文档
- 读懂约束文档
XML的约束文档
约束文档的分类:
DTD
简单的约束技术schema
复杂的约束技术
做到会引入,能简单阅读即可
引入DTD文档到XML文档中
分类:
- 内部
DTD
:将约束规则定义在XML文档中 - 外部
DTD
:将约束规则定义在外部的DTD
文件中
- 本地
DTD
:
<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
- 网络
DTD
<!DOCTYPE 根标签名 PUBLIC "dtd文件的名字" "dtd文件的URL位置">
示例:
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
<!--DTD文档的解读-->
<!--
1、声明一个标签根标签:students,这个根标签里面能放student子标签,能出现的次数是*(正则表达式的0次或者多次)
2、定义了一个student标签,student标签里面能放name、age、sex三个标签,每一个只能出现一次,必须按顺序出现(没有声明次数)
3、name标签,标签体里面是PCDATA(字符串),age和sex也是字符串
4、给student标签定义了一个属性,属性名字叫number,类型为ID(表示number的属性值必须为1),REQUIRED意思是必须出现的属性
根据约束文档写XML文档
-->
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!--<?xml-stylesheet type="text/css" href="a.css" ?>-->
<!--第二行会把数据取出,展示成红颜色。限制XML已经不用于展示数据了-->
<!--引入外部的dtd约束文档-->
<!DOCTYPE students SYSTEM "Student.dtd">
<students>
<student number="1">
<name>fawaikuangtu</name>
<age>22</age>
<sex>male</sex>
</student>
<student number="2">
<name>fawaikuangtu</name>
<age>22</age>
<sex>male</sex>
</student>
</students>
引入Schema到XML中
区别于DTD
的关键是Schema
可以对标签当中的内容进行数据类型、大小值、默认值的限制
步骤:
- 填写xml文档的根元素
- 引入xsi前缀:
xmlns:xsi="http://www.w3.org/2001/XMLSchema"
- 引入xsd文件命名空间(给URL路径起了一个名字,名字是xsd文件名称):
xsi:schemaLocation="http://xxx.xxxx.xx/xml xsd文件名称"
- 为每一个xsd约束声明一个前缀,作为标识 :--->是给名称空间起的前缀(什么都不写就是默认前缀,当多个约束文档约束一个xml文件且这些约束文档里面由标签名称相同的时候前缀就显得尤其重要。给名称空间起别名)
xmlns="http://xxx.xxxx.xx/xml"
XML的解析
本质:
操作XML文档,将文档中的数据读取到内存中
- 读取:将文档中的数据读取到内存中
- 写入:将内存中的数据保存到xml文档中--->持久化的存储(与IO的读写本质一致)
解析XML的思想:
DOM
思想--->Document Object Moudle
将标记语言文档一次性加载进内存,在内存中形成一个DOM
树--->常用于服务器端
- 优点:
- 操作方便,可以对文档进行CRUD的所有操作
- 缺点:
- 文档比较大,消耗内存资源
SAX
思想--->逐行读取,由事件驱动--->常用于移动端
- 优点:
- 不占用内存
- 缺点:
- 只能读取,无法对原数据进行修改。不能增、删、改
It's a lonely road!!!