一、xml概述
1、xml是什么?
Extensible Markup Language 可扩展标记语言。xml是一种数据存储格式, 本质上就是一段字符串。
那么,xml是如何来保存数据的?
(1)xml中允许用户自定义标签, 标签分为开始标签和结束标签。开始标签和结束标签之间可以嵌套其他的标签。
(2)正是利用标签来保存数据, 利用标签之间嵌套关系来保存数据之间的层级关系。
2、xml的应用场景
(1)传输数据:由于xml本质上是一段字符串, 具有跨平台的特性, 因此可以在不同系统之间进行数据交换。
(2)用作配置文件:由于xml可以保存有结构的数据, 因此xml常被用来用作应用程序的配置文件。
二、语法
1、文档声明
它是用来声明当前xml基本属性信息的, 解析器会根据文档声明来决定如何解析xml文件。
注意:
(1)一个xml文件必须包含且只能包含一个文档声明。
(2)文档声明必须放在xml文件的第一行,前面不能有任何内容。
(3)如果一个xml文件没有包含文档声明, 则该xml是一个不符合规范的xml文件。
(4)文件在保存时所使用的编码要和encoding属性所指定编码相同, 才可以避免乱码问题。
写法:
<?xml version="1.0"?>
version用来声明当前xml所遵循的xml规范, 目前就是1.0;
<?xml version="1.0" encoding="UTF-8"?>
encoding用来声明当前xml所使用的字符集编码, xml解析器在解析xml的时候,会根据encoding属性所指定的编码来解析xml文件。
<?xml verison="1.0" encoding="UTF-8"? standalone="yes"?>
standalone用来声明当前文档是否独立, 如果xml文档不依赖其他的文档而存在, 表明当前文档是一个独立的文档, 可以指定值为yes, 如果当前文档需要依赖其他的文档而存在, 需要指定值为no。
2、元素
一个标签(标记)就是一个元素。
标签分为开始标签和结束标签, 在开始标签和结束标签之间的文本称之为标签体。如果一个标签既不包含标签体, 也不包含其他的子标签, 可以把开始标签和结束标签合并成一个自闭标签。
注意:
标签要合理的嵌套, 不能出现交叉嵌套。一个xml文件有且仅有一个根标签。标签没有结束标签或者是自闭标签没有自闭!!!
元素的命名规范:
区分大小写。
不能以数字或标点符号开头。
不能以xml(XML, Xml)开头。
不能包含空格 如:
不能包含冒号 如:<a:b>
3、属性
一个元素上可以声明多个属性, 多个属性之间用空格隔开。
属性与属性值用等号连接, 属性的值用单引号或者双引号引起来。属性的命名和元素遵循相同的命名规范。
4、注释
格式:
<!-- xml注释 -->
注意:
注释不能放在文档声明的前面,注释不能交叉嵌套。
5、转义字符
常用的转义字符:
< <
> >
& &
" "
' '
三、xml约束
约束: 在xml中, 可以提供约束文档来约束xml文档的写法。
DTD/Schema W3C。
这在spring等框架中应用广泛。
四、xml解析
DOM解析:
将整个XML文档加到内存中,用一个Document对象来表示整个文档。
将XML文档中所有的内容(元素、属性、文本等)都解析成一个一个的对象,
用对象来表示元素,用对象与对象之间的引用关系来表示元素之间的层级关系。
通过在程序中操作对象来间接的操作(增删改查)XML文档中的内容。
优点:
(1)可以十分方便对节点进行增删改查的操作。
(2)在内存中保存了一颗文档结构树, 只需要解析一次就可以重复使用这些数据。
缺点:
(1)将整个文档都加载到内存中用对象表示,占用内存空间,如果xml文档体积非常庞大时,将会十分耗费内存。
(2)需要等整个xml文档解析完成后,才可以对节点进行操作,相对来说耗费时间,效率低。
SAX解析:
优点:
(1)由于是逐行解析,因此不需要将整个XML文档加载进内存,占用内存小。理论上多大的XML文件都可以解析
(2)由于是逐行解析,遇到想要的内容就可以停下来处理,效率高
缺点:
(1)每次需要数据都需要重新解析。
(2)只能读数据,不能对XML文档进行增删改的操作。
五、B/S和C/S架构的特点
B/S: Browser-Server 浏览器服务器模型。比如: 网页游戏
优点: 不需要下载客户端程序, 使用浏览器可以直接访问. 程序的升级操作是在服务器端进行的. 浏览器只需要刷新页面就可以看到升级后的效果
缺点: 浏览器具有一定的局限性, 页面的展示能力仍然是很差. 所有的页面数据都需要从服务器实时的获取, 所以对网速的依赖很高
C/S: Client-Server 客户端服务器模型。比如: QQ应用程序 LOL软件
优点: 客户端可以任意的设计, 页面的展示能力就可以很强. 由于大量的资源都已经保存在了客户端, 和服务器交互的仅仅是一些变化的数据, 所以对网速的依赖很低
缺点: 第一次使用时需要下载客户端程序, 一旦程序需要升级操作, 所有的客户端程序都需要升级. 在有些场景中是不能被接受的。