1.XML简介
(1)Extensible Markup Language: 可扩展标记型语言
标记型语言:html也是标记型语言,也是使用标签来操作
可扩展:html的标签固定。XML可以自己定义标签,可以写中文的
(2)XML用途:html是用于显示数据,XML也可以用于显示数据(不是主要功能),XML主要用于存储数据
(3)XML 由W3C发布的技术,有1.0 和1.1,用的1.0版本,1.1不能向下兼容
(4)XML的应用:
A.不同的系统之间传输数据
*qq之间的数据传输
B.用来表示生活中有关系的数据
C.经常用在文件配置
*修改数据库的信息,不用修改源代码,修改配置文件就可以
2.XML的语法:
(1)XML的文档声明:
在创建.XML的文件后,第一行第一列必须是文档声明:<?xml version="1.0" encoding="gbk" ?>
encoding:xml的编码,有gbk , utf-8 , iso8895-1(不包含中文)//注意保存的时候,编码,和打开的时候的是一样的,不然会出现乱码
standalone:是否需要依赖其他文件 ,yes/no
(2)定义元素,标签:
标签有开始就必须有结束;但是标签没有内容就可以在标签内结束<aa/>;
一个xml,只能且仅有一个跟标签;
xml会把空格,换行都当成内容来解析
xml命名规则:xml区分大小写,xml标签不能以数字和下划线开头,且不能以xml,XML,Xml来开头,标签不能包含空格和冒号
(3)定义属性:一个标签上可以有多个属性,但是属性名称不能相同,属性名称和属性值之间使用=,属性值使用引号包起来(可以是单引号,双引号),
xml属性的命名规则和元素的命名规则一样。
(4)注释:<!--xml的注释-->,不能嵌套。
(5)特殊字符:如果想要显示>或者<需要,转义字符 < < ; > >;
(6)CDATA区(了解):可以解决多个转义字符频繁转化的问题,格式:<![CDATA[ 内容 ]]>
(7)PI指令(了解):用于设置XML的样式,格式:<?xml-stylesheel type="text/css" href="css的路径"?>,且对中文标签不起作用。
不过该属性用的很少,XML主要用于存储数据,不作显示数据的作用
3.xml的约束:dtd约束,schema约束(了解)
4.dtd入门:
创建后缀名.dtd,看有多少个元素就写几个</!ELEMENT>
判断元素是简单元素还是复杂元素:
-复杂:有子元素的元素<!ELEMENT 元素名称 (子元素)>
-简单:没有子元素<!ELEMENT 元素名称 (#PCDATA)>
需要在xml中引用dtd文件
-在xml文件引入dtd文件<!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">
5.dtd三种引入方式
(1)引入外部的dtd文件<!DOCTPYE 根元素名称 SYSTEM "dtd文件路径">
(2)使用内部的dtd文件
<!DOCTYPE 根元素的名称 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
(3)使用外部,网络上的dtd文件 框架struts2 使用配置文件 使用外部的dtd文件。
6.使用dtd定义元素:
语法:<!ELEMENT name (#PCDATA)>
***(#PCDATA):约束name 是字符串类型
***EMPTY :约束元素为空
***ANY: 任意类型
复杂元素:<!ELEMENT 元素名称(子元素)>
<!ELEMENT person (name,age)>
**子元素只能出现一次,如name
表示子元素出现的次数:<!ELEMENT person (name+,age)>
+:表示一次或者多次
?:表示零次或者一次
*:表示零次或者多次
子元素用逗号隔开,代表子元素出现的顺序
子元素用|隔开,出现这些子元素的其中一个
7.dtd定义属性
* 语法:<!ATTLIST 元素名称
属性名称 属性类型 属性的约束
>
*属性类型:
-CDATA:: 字符串
<!ATTLIST birthday
ID1 CDATA #REQUIRED>
-枚举:只能在这些值取,且只能取一个
<!ATTLIST age
ID2 (AA|BB|CC) #REQUIRED>
-ID: 值只能是字母或者下划线开头
<!ATTLIST name
ID3 ID #REQUIRED>
*属性的约束:
-#REQUIRED:属性必须存在
-#IMPLIED :实行可有可无
-#FIXED:表示属性的值必须是这个固定值 #FIXED "ABC"
-#直接值:<!ATTLIST name
ID3 CDTAT "WWW">
不写属性,试用直接值,写了属性,使用设置那个值
8.DTD引用实体:在DTD中定义,XML中使用
语法:<!ENTITY实体名称 "实体内容">
引用方式:(XML中使用):&实体名称
如:DTD定义:<!ENTITY copyright "XXX">
XML引用:©right
9.XML解析方式两种:dom和xax
sax解析过程:从上到下,一行一行解析,解析到某一个对象,把对象名称返回。
使用sax方式不会造成内存溢出,实现查询;但是不能实现增删改操作
dom解析过程:根据xml层级结构,内存直接分配一个树形结构。使用dom方式解析xml时候,如果文件过大,会内存溢出;但是又很方便实现增删改操作。