一.XML简介:
1.1 XML概括:
XML即可拓展标记语言,主要作用是传输数据(很少用了,主要是JSON)和配置文件。同时XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言(可以自己定义标签)。XML是标准通用标记语言(SGML)的子集,非常适合Web传输。XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
XML和HTML不同,HTML是前端页面标签语言,是用来显示数据的,XML是用来传输数据的。
1.2 XML作用:
XML可以作为配置文件,JavaEE框架,SSM框架 大部分都是使用的XML作为配置文件的。
XML可以存储数据,作为数据交换的载体【使用XML格式进行数据的传输】
1.3 XML的组成:
一个标准的XML文件一般是由以下及部分组成:文档声明、元素、属性、注释、转义字符、字符区
二.XML基本使用:
2.1 文档的声明:
xml声明一般是xml文档的第一行;
文档声明必须为【<?xm】开头,以【?结束>】。
文档声明必须从文档的0行0列位置开始
<?xml version="1.0" encoding="UTF-8"?>
2.2 标签 元素:
元素是XML中最重要的组成部分,
标签分为开始标签和结束标签,开始标签<begin>的话,那么结束标签必须是配套的</begin>来结束
开始标签和结束标签中间写的是标签内容,标签内容可以是文本,也可以是其他子标签【子标签】
如果标签没有任何内容,那么可以定义为空标签<begin/>
标签可以嵌套,但是不能乱嵌套,保证父与子的盒子的逻辑关系
一个XML文件只有一个根标签
标签名必须符合标识符的命名规则
命名规则:
不能使用XML、xMl、XmL....类似的单词
不能使用空格、冒号等特殊符号
区分大小写
数字不能开头
2.3 注释:
<!-- 注释的内容 -->
XML注释,以【<!--】开头,以【-->】结尾
注释不能嵌套
2.4 属性:
位置:属性是元素的一部分,它必须出现在元素的开始标签中,不能出现在结束标签中
格式:属性的定义格式【属性名="属性值"】,其中属性值必须使用单引号或双引号括起来
一个元素可以有0-n个属性,但一个元素中不能出现同名的属性
属性名必须要符合标识符的命名规则
2.5 约束:
根据DTD约束正确的书写XML,在XML技术中可以编写一个文档来约束一个XML文档的书写规范,这就称之为XML约束。约束文档定义在XML文件种允许出现的元素/标签名称、属性以及元素出现的顺序等等。有两种约束:【DTD约束,文件后缀.dtd】、【Schema约束,文件后缀.xsd】。
注意:约束文档不需要我们去写,我们只要按照约束文档的要求去写XML就可以了
重点介绍 Schema约束:
Schema和DTD是一样的,也是一种XML文件的约束。Schema约束的后缀格式是 .xsd
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.donglan.com"
elementFormDefault="qualified">
<!-- element:表示元素,也就是对元素进行约束-->
<!-- 跟标签的名称:书架 -->
<xs:element name='书架'>
<!-- complexType:复杂标签 -->
<!-- 书架是一个复杂标签-->
<xs:complexType>
<!-- squence:表示序列的意思,在这里要按照顺序出现 -->
<!-- maxOccurs:最多出现几次,minOccurs:最少出现几次-->
<xs:sequence maxOccurs='2' minOccurs="1">
<!-- 书架的子标签的名称是书-->
<xs:element name='书'>
<!--书 标签 又是一个复杂标签-->
<xs:complexType>
<!-- 书标签的子标签必须按照顺序出现-->
<xs:sequence>
<!-- 书标签的子标签名是 书名,类型为String-->
<!-- 书标签的子标签名是 作者,类型为String-->
<!-- 书标签的子标签名是 售价,类型为String-->
<xs:element name='书名' type='xs:string'/>
<xs:element name='作者' type='xs:string'/>
<xs:element name='售价' type='xs:double'/>
</xs:sequence>
<!-- attribute 表示的是:属性,也就是对属性的约束,optional:表示客源,required:就是必选-->
<xs:attribute name="bid" type="xs:int" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XML文件:
<书架 xmlns="http://www.donglan.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.donglan.com bookSchema.xsd" >
<书>
<书名>斗破苍穹</书名>
<作者>土豆</作者>
<售价>19.9</售价>
</书>
<书>
<书名>斗罗大陆</书名>
<作者>唐家三少</作者>
<售价>20.9</售价>
</书>
</书架>
XML解析:
常见的三种解析方式:
DOM:要求解析器把整个XML文件装载到内存,并解析成一个Document对象
优点:元素与元素之间保留结构关系,我们可以很方便的对其进行增删改查
缺点:XML文档过大的话,可能出现内存溢出
SAX:是一种速度更快,更有效的方式,它是逐行扫描,一边扫描一遍解析,并且以时间驱动的方式 进行具体的解析,每执行一行,都会触发对应的事件
优点:不会出现内存问题,可以处理大的文件
缺点:只能读,不能回写
PULL:Android内置的XML解析方式,类似于SAX
解析包:
就是根据不同的解析方式提供具体实现,有的解析器过去繁琐,为了方便开发人人员,会有提供易于操作的解析开发包
Dom4j:比较简单的解析开发包(日常开发包中用的次数最多的)
DOM解析原理以及结构模型:
解析原理:XML DOM 将整个XML文档加载到内存,生成一个DOM树,并且获得一个Document对象 通过Document对象就可以对DOM进行操作