作者:empty 出版社:empty |
1xml概述实际上就是数据
1.1使用xml的原因
为了弥补html的缺点
(1)标签是规定好的,用户不能够自定义 table>认识 table1>不认识
(2)显示的样式和数据是绑定在一起,数据没有办法复用。
(3)标签是没有什么直接含义的 td>本身是没有什么含义的
(4)浏览器对其的解析不一致。
1.2用途
1.2.1可以作为一种通信标准(ajax,xml,json)
由于$message=”hello world”;表现的内容很少 所以xml可以作为通信标准让他的表述更加清楚。
而且标签sender/geter等都有了含义,让人知道里面的内容是什么
例如下面的例子
可以用下面的XML语言进行描述
1.2.2作为配置文件在PHP中使用
如果我们在php中链接数据库
?php
$conn=mysql_coonect(“localhost”,”bashoi123”,”q53230211”);
//php可以操作xml文件
?>
假设有配置文件
dbinfo>
host>123,11,11,23 /host>
user>bashoi123 /user>
type>mysql /type>
password>q53230211 /password>
/dbinfo>
1.2.3可以当小型数据库
程序去操作数据库是很慢的,实际上没有直接去操作文件快。在用mysql的时候都是经过了dbms去操作文件
如果有些数据,放在数据库代价高,这样就可以直接放入文件,比如在使用msn的时候把聊天记录保存在本地的XML文件中。
2XML语法
2.1快速入门案例
?xml version= 1.0 encoding= utf-8 ?>
class>
stu>
name>华昆 /name>
sex>男 /sex>
age>28 /age>
/stu>
stu>
name>李雪晴 /name>
sex>
女
/sex>
age>21 /age>
/stu>
/class>
2.1.1注意点
(1)XML必须要有一个根元素。
class就是根元素
(2)上图的name可以称为元素或者是标签。
(3)如果里面不写东西 介绍/>
(4)区分大小写 name> /Name>XML解析的时候认为他没有结束。
3XML属性使用的注意点
?xml version= 1.0 encoding= utf-8 ?>
class>
stu stuNo= a001 >
name>华昆 /name>
sex>男 /sex>
age>28 /age>
/stu>
stu stuNo= a002 >
name>李雪晴 /name>
sex>女 /sex>
age>21 /age>
/stu>
/class>
3基本语法注意点
标签 属性名=”属性值”>
内容
/标签>
(1)如果在属性值里面需要添加单引号或者是双引号 可以用XML提供的索引机型替代。
stu stuNo= a00"1 >
显示的结果
(2)可以出现多个属性名,但是不能出现相同的属性名。
(3)注释的语法是 !--这是一个注释-->
4CDATA节
有些内容可能不想让解析引擎解析执行,而是当作原始内容处理,用于把整段文本解释为纯字符数据而不是标记的情况,包含大量 >&或者 ”字符,CDATA节中的所有字符都会被当作元素字符数据的常量部分,而不是XML标记
一般情况下XML都是传的文本比如华昆,但是偶尔也会传一些2进制的数据图片文件都是由2进制码构成的。这时候可以用CDATA节来特殊字符显示
4.1使用方法
?xml version= 1.0 encoding= utf-8 ?>
!--这是一个注释-->
class>
stu stuNo= a00"1 stuNo2= t-001 >
name>华昆 /name>
sex>男 /sex>
age>28 /age>
介绍> ![CDATA[李雪晴的男朋友 > >L]]> /介绍>
头像> ![CDATA[*&……%&**]]> /头像>
/stu>
stu stuNo= a002 >
name>李雪晴 /name>
sex>女 /sex>
age>21 /age>
/stu>
/class>
使用XML保存图片的方法
使用程序读入到内存,然后保存到XML文件中CDATE节中
5使用PI指令对XML文件进行修饰(了解)
代码如下
?xml-stylesheet type= text/css href= class.css ?>
6XML文件约束-dtd(documentyupe definition)文档类型定义。
6.1为什么需要XML约束
例1如当我在班级的信息中添加这样的信息
stu stuNo= a00"1 stuNo2= t-001 >
name>华昆 /name>
sex>男 /sex>
age>28 /age>
面积>20 /面积>
出毛净重>30Kg /除毛净重>
/stu>
例2 在HTML的标签中可用的有三种DTD的类型,分别是严格版本,过渡版本,和基于框架的版本。
根本上是为了约束XML文件的书写,也可以去约束其他文件xhtml html
常用的约束技术还有schema
6.2DTD快速入门案例
XML引入的方法 !DOCTYPE 根元素名 SYSTEM 写dtd的路径 />
?xml version= 1.0 encoding= utf-8 ?>
!DOCTYPE 班级 SYSTEM class2.dtd />
class>
stu stuNo= a00"1 stuNo2= t-001 >
name>华昆 /name>
sex>男 /sex>
age>28 /age>
面积>20 /面积>
出毛净重>30Kg /除毛净重>
/stu>
stu stuNo= a002 >
name>李雪晴 /name>
sex>女 /sex>
age>21 /age>
/stu>
/class>
Class2.dtd
!ELEMENT 班级 (学生+)>
!ELEMENT 学生 (名字年龄介绍)>
!ELEMENT 名字 (#PCDATA)>
!ELEMENT 年龄 (#PCDATA)>
!ELEMENT 介绍 (#PCDATA)>
注意:在默认情况下浏览器是不会检测,我们需要自己写代码来测试。
CheckDTD.html
步骤如下
(1)创建XML文档解析器对象
Var xmldoc=new ActiveXObjext(“Microsoft.XMLDOM”);
(2)开启XML校验
Xmldoc.validateOnParse=”true”;
(3)装载XML文档
Xmldoc.load(“class2.dtd”);
(4)获取错误信息
Xmldoc.parseError.reason;
Xmldoc.parseError.line
三者之间的关系如下如所示
6.3DTD的基本语法详解
(1)DTD分为外部DTD和内部DTD有点类似于css的用法
Class2.dtd
!ELEMENT 班级 (学生+)>
!ELEMENT 学生 (名字年龄介绍)>
!ELEMENT 名字 (#PCDATA)>
!ELEMENT 年龄 (#PCDATA)>
!ELEMENT 介绍 (#PCDATA)>
(2)例子:将上面的外部dtd的用法(在XML文件中我进行了详细的声明)直接写入到XML文件内部
?xml version= 1.0 encoding= utf-8 ?>
!DOCTYPE 班级 [
!ELEMENT 班级 (学生+)>
!ELEMENT 学生 (名字,年龄,介绍+)>
!ELEMENT 名字 (#PCDATA)>
!ELEMENT 年龄 (#PCDATA)>
!ELEMENT 介绍 (#PCDATA)>
]>
班级>
学生>
名字>华昆 /名字>
年龄>23 /年龄>
介绍>学习刻苦 /介绍>
面积>20 /面积>
/学生>
学生>
名字>李雪晴 /名字>
年龄>23 /年龄>
介绍>非常认真 /介绍>
/学生>
/班级>
(3)在XML文件中引入DTD文件的两种方式。
①本地引用
②引入公开的DTD
!DOCTYPE 文档根节点 PUBLIC ‘DTD名称’ “DTD文件的URL”>
(4)DTD的基本语法
①《!ELEMENT 元素名 元素类型》
②组合类型。
上例中的” +”号的意思是
根据上面图的意思学生可以出现1次以上,所以可以再写 学生>
*号的意思是可以不出现如下面的例子所示
解释:一个家庭 必须要有人,但是可以没有家电(家徒四壁)
?号是对象出现0~1 及是 可以不出现,如果出现只能出现一次
一个班级里面可以没有班长,但是如果有只能有一个班长
逗号 可以代表一个顺序。
意思如下图所示这里必须注意顺序
6.4修饰符的意义
几个修饰符的意思简介
? 0到1
+ 1到多
* 0到多
| 表示选择
,表示元素的顺序
6.5属性定义--语法
6.5.1基本语法
!ATTLIST 元素名字
属性名 属性类型 属性的特点
属性名 属性类型 属性的特点
>
6.5.2属性类型
CDATA 【表示属性值可以是字符或者数字】
ID 【属性值是唯一的,字母开头】
IDREF/IDREFFS 【ID引用】
Enumerated 【枚举】
ENTITY/ENTITIES 【实体】
6.5.3属性特点和属性类型CDATA
1.Required必须有
例子
这是时候林青霞的位置会报错,因为没有住址-require是必须的
2.Implied可有可无
例子
3.Fixed固定
4. .Default value默认
6.5.4属性类型----ID(唯一的必须要以字母开头)
表明该属性的取值必须是唯一的
例子给学生添加编号
如果林青霞的学号也变成a001会报错误
6.5.4属性类型----IDREF
(1)解释:例如每个学生都应该拜大哥
(2)自己做自己的大哥也行
(3)不能瞎拜大哥
报错信息
(5)如果想拜两个大哥
6.5.5属性类型----Enumberated
(1)Enumberrated的意思是事先定义好一些值,属性的值必须在所列出的值的范围内。
6.5.6属性特点----FIXED
7实体定义
7.1实体定义的意思
用于为一段内容创建一个别名,以后再XML文档中就可以使用别名引用这段内容了。
比如$str=”abcd”;
在DTD定义中,一条 !ENTITY…..>语句用于定义一个实体。
实体分为两个类型:引用实体和参数实体。
7.2引用实体
首先定义一个引用实体
然后再XML文件中对他进行引用
7.3参数实体
参数实体被DTD本身使用
如果乱写报错
CheckDTD.html的错误信息
DTD文件
!ELEMENT 班级 (学生+,班长)>
!ENTITY intro 这是一个介绍 >
!ENTITY % sName 名字 >
!ATTLIST 学生
住址 CDATA #IMPLIED
学号 ID #REQUIRED
大佬 IDREFS #REQUIRED
婚姻状态 (单身|结婚|离婚) #REQUIRED
国籍 CDATA #FIXED 中国
>
!ELEMENT 学生 (%sName;,年龄,介绍)>
!ELEMENT %sName; (#PCDATA)>
!ELEMENT 年龄 (#PCDATA)>
!ELEMENT 介绍 (#PCDATA)>
!ELEMENT 班长 (#PCDATA)>
XML文件
?xml version= 1.0 encoding= UTF-8 ?>
!DOCTYPE 班级 SYSTEM test.dtd >
班级>
学生 学号= a001 大佬= a001 婚姻状态= 单身 >
名字>小明 /名字>
年龄>23 /年龄>
介绍>好学生 /介绍>
/学生>
学生 学号= a002 大佬= a001 婚姻状态= 单身 >
名字>小美 /名字>
年龄>20 /年龄>
介绍>好人 /介绍>
/学生>
班长>小李 /班长>
/班级>
看懂下面的DTD文件
!DOCTYPE CATALOG [
!ENTITY AUTHOR John Doe >
!ENTITY COMPANY JD Power Tools, Inc. >
!ENTITY EMAIL jd@jd-tools.com >
!ELEMENT CATALOG (PRODUCT+)>
!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
//在Product中下面几个子元素, +有多个 ?可以有一个
!ATTLIST PRODUCT
NAME CDATA #IMPLIED//属性NAME可以给也可以不给
CATEGORY (HandTool|Table|Shop-Professional) HandTool //枚举类型类别,如果不给值就默认这handTOOL
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) Chicago //产地默认是芝加哥 枚举类型
INVENTORY (InStock|Backordered|Discontinued) InStock >//库存枚举类型 默认的是在库
!ELEMENT SPECIFICATIONS (#PCDATA)>// SPECIFICATIONS的说明
!ATTLIST SPECIFICATIONS//属性的说明
WEIGHT CDATA #IMPLIED//多种
POWER CDATA #IMPLIED>//功率是多大。
!ELEMENT OPTIONS (#PCDATA)>// OPTIONS的说明
!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) Matte
ADAPTER (Included|Optional|NotApplicable) Included
CASE (HardShell|Soft|NotApplicable) HardShell >
!ELEMENT PRICE (#PCDATA)> // PRICE的说明
!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>
!ELEMENT NOTES (#PCDATA)>
]>