博客
关于我
【PHP XML与dtd概述【完整版】】
阅读量:441 次
发布时间:2019-03-06

本文共 3107 字,大约阅读时间需要 10 分钟。

一、XML文件简介

关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序。

XML可以当做配置文件使用,还可以充当小型的数据库。

version:文档符合xml1.0规范,我们学习的一般都是1.0

encoding:文档字符编码,比如gb2312,一般使用utf-8
standalone:文档定义是否独立使用
standalone="yes",表名文档独立使用
standalone="no":默认

XML文档有且必须仅有一个根元素

根元素定义:

一个完全包含文档中其他所有元素的元素
根元素的其实标记要放在所有其他元素的起始标记之前
根元素的结束标记要放在所有其他元素的结束标记之后。

元素、标签、节点指的是同一个东西,在XML文件编程的时候,我们统一使用节点这个名称,这样显得更专业~

另外,如果标签中间没有内容,就是用但标签来表示,比如<name/>

PHP在解析XML文件的时候有时候会认为有换行符,当做内容的一部分,所以开始标签和结束标签最好在同一行。

<name>宋江</name>

<name>

宋江

</name>

并不等价。

 

XML命名规范:

1.标签区分大小写。
2.不能以数字或者下划线打头
3.不能包含空格
4名称中间不能包含冒号:

XML文件的注释使用HTML文件中的注释方法。

XML文件中的属性值要用双引号包起来。

二、dtd文件概述。

dtd概念:

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,称之为XML约束,dtd是约束XML文件书写规范的一种约束。

PHP中比较重要的两种约束:dtd约束、schema约束。

dtd约束XML文件的必要性:

举例说明:

XML文件中现在有结点person,但是里面除了有<name>、<age>之外,还有<除毛净重><面积>,这就不合理了。

dtd不仅可以约束XML,还可以约束xhtml、HTML等

dtd文档的格式详解:

基本语法:<!ELEMENT NAME CONTENT>

ELEMENT是关键字,NAME是元素名称,CONTENT是元素类型

CONTENT的类型有以下几种:

EMPTY:该元素不能包含子元素和文本,但可以有属性(空元素)
ANY:该元素可以包含任何在DTD中定义的元素内容
#PCDATA:可以包含任何字符数据,但是不能在其中包含任何子元素
其他类型:以上三种类型的组合

简单dtd文件示例:

1 
//代表根节点班级至少需要有一个学生节点2
//学生标签中可以使用的标签有名字、年龄、介绍3
//介绍标签中的内容只能是字符类型,即文本类型,不能再嵌套其它标签

组合示例:

1 
2 //表示班级中只有一个班长,可以有组长(没有或者多个),至少有一个学生

通配符讲解:

+表示1-n,*表示0-n;n>=1

?表示只能出现一次,就是说只能出现一次或者0次
()用来给元素分组
|用来选择符号
,是顺序符号,控制xml文件的书写顺序。

 

dtd文件属性定义:

属性定义语法:

<!ATTLIST 元素名称

属性名字 属性类型 属性特点
属性名字 属性类型 属性特点
>

属性类型有:

CDATA:表示属性值可以是字符或者数字

ID:代表属性的值是唯一的,并且要以字母开头
IDREF/IDREFS:id引用,引用类型的;属性值要在xml文档中有定义,前者只可以引用一个,后者可以引用多个,之间用空格隔开
Emumerated:枚举类型,顾名思义,如性别,只能是男和女

ENTITY/ENTITIES:前者是引用实体,后者是参数实体

属性特点有以下几种:

#REQUIRED :该属性必须有

#IMPLIED :该属性可以有也可以没有
#FIXED value :该属性的值是固定值
DEFAULT value:默认值,如果没有给属性值

举例:

举例:婚姻状态  (单身|已婚|离婚)   #REQUIRED:表示婚姻状态属性必须从单身、已婚、离婚中选择一个,而且必须有此属性

引用实体用法:

<!ENTITY 实体名 "内容">

在xml文件中使用的时候:&实体名;

参数实体用法:

<!ENTITIES % 实体名称 实体内容>

在dtd文件中使用:%实体名称;

四、XML引入dtd约束

dtd分为内部dtd和外部dtd

内部dtd:将dtd的定义写在XML文件中

外部dtd:将的dtd单独写在一个dtd文件中,将之引入XML文件中。

引入dtd语法格式:

内部dtd的格式:<!DOCTYPE 根元素 [定义内容]>

外部dtd文档:<!DOCTYPE 根元素 SYSTEM "DTD文件路径">
内外部DTD文档结合:<!DOCTYPE 根元素 SYSTEM "DTD文件路径"[定义内容]>

注意:当引用的文件是一个公共的文档的时候,采用如下方式:

<!DOCTYPE 文档根结点 PUBLIC "DTD名称" “DTD文件的URL”>

 

复杂dtd综合案例:

产品目录dtd

1  4 
5
6 7
8 9
11
17 18
19
22 23
24
28 29
30
35 36
37 38 ]>
View Code

该dtd我们首先可以看出是一个内部dtd,其次,我们可以看出,该dtd每定义完一个节点,都紧接着在后面将该节点的属性列出来,这是一种良好的书写规范。

学习PHP对dtd的要求就是能看懂以上的dtd文档,并要求根据dtd文件写出相应的XML文件。并不要求会写dtd,因为那是项目经理干的事情。

五、使用js验证XML文件的规范性。

由于浏览器默认不会验证XML文件是否满足的dtd文档的约束条件,所以我们需要自己写代码验证,为此,IE5.0以上的版本均提供了XML解析工具:Microsoft.XMLDom,开发人员可以编写js代码,利用这个解析工具装载XML文件,并对XML文件进行dtd验证。

实例代码:

dtd_control.dtd文档内容如下:

1 
2
3
4
5
6

Person.xml文件内容如下:

1 
2 3
4
5
张三
6
16
7
8
9
10
张燕
11
17
12
13
14
15
赵六
16
20
17
18
19

js_text.html文件:网页中嵌入js代码进行测试,用浏览器打开此文件进行dtd文件的验证,这些代码不需要记住,只需会用即可。

1  2  3 
4 5 25

转载地址:http://vwcyz.baihongyu.com/

你可能感兴趣的文章
MySQL中DQL语言的执行顺序
查看>>
mysql中floor函数的作用是什么?
查看>>
MySQL中group by 与 order by 一起使用排序问题
查看>>
mysql中having的用法
查看>>
MySQL中interactive_timeout和wait_timeout的区别
查看>>
mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>