XML介绍、XML约束、XML解析(特别详细,跟着看⼀遍就懂
了)
⼀、XML介绍
XML和HTML很相似,HTML是前端页⾯标签语⾔
XML指的是扩展标记语⾔【Extensible Markup Language】
XML⽤来传输数据的,不是⽤来显⽰数据的,之后学习的HTML是显⽰数据的
XML标签没有被预定义。<;标签>内部是要我们来⾃定义的<Person></Person>
XML是W3C的标准推荐,3C 的⼯作是对 web 进⾏标准化,web就是指的前端
W3C在1988年2⽉发布的1.0版本,2004年2⽉⼜发布了1.1版本,但是1.1版本不像下兼容1.0版本,所以没⼈⽤1.1版本,
网络上xml是什么意思同时2004年2⽉W3C⼜发布了1.0版本的第三版,我们学习使⽤的就是1.0版本
⼆、XML和HTML的区别
1.HTML标签语⾔语法松散,XML语法严格,区分⼤⼩写
2.HTML主要是做页⾯传输,XML主要是做数据传输的
3.HTML所有标签都是定义好的,XML所有标签都是⾃定义的
三、XML的作⽤:
1.XML可以作为配置⽂件,JavaEE框架,SSM框架 ⼤部分都是使⽤的XML作为配置⽂件的
2.XML可以存储数据,作为数据交换的载体【使⽤XML格式进⾏数据的传输】
四、XML的组成元素
⼀个标准的XML⽂件⼀般是由以下及部分组成:
⽂档声明、元素、属性、注释、转义字符、字符区
⽂档声明:<?xml version="1.0" encoding="UTF-8"?>
1.⽂档声明不⽤我们去写
2.⽂档声明必须为【<?xm】开头,以【?结束>】
3.⽂档声明必须从⽂档的0⾏0列位置开始
4.⽂档声明中常见的两个属性
version:指定的XML⽂档版本。必须属性,这⾥⼀般是选择1.0;
encoding:指定当前⽂档的编码,可选属性,默认是UTF-8;
元素:(标签),<;标签>
1.元素是XML中最重要的组成部分,元素也叫做标签
2.标签分为开始标签和结束标签,开始标签<begin>的话,那么结束标签必须是配套的</begin>来结束
3.开始标签和结束标签中间写的是标签内容,标签内容可以是⽂本,也可以是其他⼦标签【⼦标签】
4.如果标签没有任何内容,那么可以定义为空标签<begin/>
5.标签可以嵌套,但是不能乱嵌套,保证⽗与⼦的盒⼦的逻辑关系
6.⼀个XML⽂件只有⼀个根标签
7.标签名必须符合标识符的命名规则
命名规则:
不能使⽤XML、xMl、类似的单词
不能使⽤空格、冒号等特殊符号
区分⼤⼩写
数字不能开头
注释:<!-- 注释的内容 -->
XML注释,以【<!--】开头,以【-->】结尾
注释不能嵌套
idea 上的快捷键是CTRL + /
属性:
1.位置:属性是元素的⼀部分,它必须出现在元素的开始标签中,不能出现在结束标签中
2.格式:属性的定义格式【属性名="属性值"】,其中属性值必须使⽤单引号或双引号括起来
3.⼀个元素可以有0-n个属性,但⼀个元素中不能出现同名的属性
4.属性名必须要符合标识符的命名规则
转义字符:
因为有些特殊的字符在XML中不会被识别,所以在元素标签⾥或者属性值中需要使⽤这些符号就使⽤转义字符即可                        <      <
>      >
&      &
"      "
注意:在XML中【<】、【&】是⾮法的
字符区:
CDATA内部的所有东西都会被解析器忽略,当作⽂本
<![CDATA[
⽂本数据
]]>
使⽤快捷键:CD
五、XML中的约束
(⼀)DTD约束
根据DTD约束正确的书写XML
在XML技术中可以编写⼀个⽂档来约束⼀个XML⽂档的书写规范,这就称之为XML约束
约束⽂档定义在XML⽂件种允许出现的元素/标签名称、属性以及元素出现的顺序等等
有两种约束:【DTD约束,⽂件后缀.dtd】、【Schema约束,⽂件后缀.xsd】
【注意】约束⽂档不需要我们去写,我们只要按照约束⽂档的要求去写XML就可以了
先看代码:(XML⽂件的约束)
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
<!ATTLIST 书
id ID #REQUIRED
编号 CDATA #IMPLIED
出版社 (清华|北⼤|冬澜教育) "冬澜教育"
type CDATA #FIXED "IT"
>
<!--
对书标签中的属性进⾏约束分析:
书标签有⼀个【id】属性,类型为ID类型所以属性值是唯⼀的,不能以数字开头,
书标签中有⼀个【编号】属性,类型为CDATA可⾏,也就是属性值是字符串,约束课有可⽆
书标签中有⼀个【出版社】属性,类型为枚举类型,也就是说该属性只能在枚举中选择⼀个,默认是冬澜教育
书标签中有⼀个【type】属性,类型为CDATA,也就是字符串,属性约束是固定值,所以该属性只能是"IT"
-->
代码解析:(分类)
对标签层级关系的约束
<!Element 标签名(⼦标签,⼦标签,...)>
数量词:
*  表⽰元素可以出现0个到多个
+  表⽰元素可以出现⾄少⼀个
表⽰元素可以是0个或是⼀个
,  表⽰元素需要按照顺序显⽰
|  表⽰元素需要选择其中的⼀个
对标签的约束
<!ELEMENT 标签名 标签类型>
标签类型:
EMPTY【空元素,例如<person/>】
ANY【任意类型】
(#PCDATA)【字符串数据】
对属性的约束
<!ATTLIST 标签名
属性名 属性类型 属性约束
属性名 属性类型 属性约束
属性名 属性类型 属性约束
...  ...
>
属性类型:
CDATA  表⽰⽂本字符串
ID  表⽰属性值唯⼀,不能以数字开头
ENUMRATED(DTD没有这个关键字) 表⽰枚举,只能从枚举列表中任选⼀项(清华|北⼤|冬澜教育)                    属性约束:
REQUIRED    表⽰该属性必须出现
IMPLIED    表⽰该属性可有可⽆
FIXED      表⽰该属性的取值为⼀个固定值
XML⽂件引⼊dtd的三种⽅式
第⼀种⽅式:外部本地DTD:DT约束⽂档在本地,DTD约束⽂档和XML⽂档配置⽂件在同⼀个⽬录下                      <!DOCTYPE 根元素 书架 SYSTEM "bookdtd.dtd">
第⼆中⽅式:外部本地DTD,DTD约束⽂档在⽹络上
<!DOCTYPE 书架 PUBLIC"DTD名称" "DTD⽂档的url">
第三中⽅式:内部DTD,在XML内部嵌⼊的DTD,只对当前XML有效
<!DOCTYPE 根元素 [元素声明]
【复制内容如下到XML⽂件中】:将上⾯的DTD约束引⼊到XML⽂件中
<!DOCTYPE 书架 SYSTEM "bookdtd.dtd">
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 书架 SYSTEM "bookdtd.dtd">
<;书架>
<;书 id="1" 编号="10" 出版社="冬澜教育" type="IT">
<;书名>从零基础学习Java</书名>
<;作者>⼤块头</作者>
<;售价>19.9</售价>
</书>
<;书 id="2" 出版社="冬澜教育" type="IT" 编号="11">
<;书名>MySQL数据库</书名>
<;作者>⼩不点</作者>
<;售价>20.9</售价>
</书>
</书架>
(⼆)schema约束
Schema和DTD是⼀样的,也是⼀种XML⽂件的约束
Schema约束的后缀格式是 .xsd
<xs:schema
xmlns:xs="/2001/XMLSchema"
targetNamespace="www.donglan"
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>
<;书架 xmlns="www.donglan"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="www.donglan bookSchema.xsd" >
<;书>
<;书名>⽃破苍穹</书名>
<;作者>⼟⾖</作者>
<;售价>19.9</售价>
</书>
<;书>
<;书名>⽃罗⼤陆</书名>
<;作者>唐家三少</作者>
<;售价>20.9</售价>
</书>
</书架>
六、XML解析:Dom4j
解析⽅式和解析包
解析⽅式:
常见的三种解析⽅式:
1.DOM:要求解析器把整个XML⽂件装载到内存,并解析成⼀个Document对象
优点:元素与元素之间保留结构关系,我们可以很⽅便的对其进⾏增删改查
缺点:XML⽂档过⼤的话,可能出现内存溢出
2.SAX:是⼀种速度更快,更有效的⽅式,它是逐⾏扫描,⼀边扫描⼀遍解析,并且以时间驱动的⽅式进⾏具体的解析,每执⾏⼀⾏,都会触发对应的事件
优点:不会出现内存问题,可以处理⼤的⽂件
缺点:只能读,不能回写
3.PULL:Android内置的XML解析⽅式,类似于SAX
解析器:
就是根据不同的解析⽅式提供具体实现,有的解析器过去繁琐,为了⽅便开发⼈⼈员,会有提供易于操作的解析开发包
Dom4j:⽐较简单的解析开发包(⽇常开发包中⽤的次数最多的)
DOM解析原理以及结构模型

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。