主要任务:
1、XML的基本概念、语法
2、DTD的文档编写
3、Schema文档的编写
4、dom4j解析xml文档
一、XML简介
XML被设计用来传输和存储数据
HTML被设计用来显示数据
二、什么是XML?
1)XML 指可扩展标记语言(EXtensible Markup Language)。
HTML的含义:超文本标记语言(超:图像、音频、文本等)
HTML中内部的标签(预先定义)
2)XML 是一种很像HTML的标记语言。
3)XML 的设计宗旨是传输数据,而不是显示数据。
4)XML 标签没有被预定义。您需要自行定义标签。
5)XML 被设计为具有自我描述性。
6)XML 是 W3C 的推荐标准。
XML的语法规则:
XML文档必须有根元素
XML声明(XML 声明文件的可选部分,如果存在需要放在文档的第一行)
所有的 XML 元素都必须有一个关闭标签
XML 标签对大小写敏感
XML 必须正确嵌套
XML 属性值必须加引号
在 XML 中,空格会被保留
三、XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
1)XML 被设计用来传输和存储数据,其焦点是数据的内容。
2)HTML 被设计用来显示数据,其焦点是数据的外观。
3)HTML 旨在显示信息,而 XML 旨在传输信息。
四、一个 XML 文档实例
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。
五、特殊符号
< 引用左尖括号:“<”
> 引用右尖括号“>”
' 引用单引号“'”
" 引用双引号“"”
& 引用与符号“&”
六、<![CDATA[" 开始,由 "]]>
CDATA 部分中的所有内容都会被解析器忽略。
七、属性
属性是指标记的属性,可以为标记添加附加信息。
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<桌子 width="300" height="600" length="1000">
吃饭用的
</桌子>
<椅子 color="red" />
</root>
八、注释
<!--”开始,以“-->”结束
九、名称空间
1、名称空间的目的是有效的区分名字相同的标记,
当两个标记的名字相同时,它们可以通过隶属不同的名称空间来相互区分。
2、名称空间通过使用声明名称空间来建立,分为有前缀名称空间和无前缀名称空间
有前缀名称空间:
有前缀的名称空间的语法如下:
xmlns:前缀=名称空间的名字
例如:
xmlns:person=“22030262029023”
声明了一个名字为“22030262029023”的名称空间
无前缀命名空间
无前缀的名称空间声明语法如下:
xmlns=名称空间的名字
例如:
xmlns =www.tup.com
例如:
<p1:张山 xmlns:p1="Liaoning">
1976年出生,大学毕业。
<p1:小张山>
在小学读书
</p1:小张山>
</p1:张山>
上述XML中的“张山”和“小张山”隶属同一个名称空间:“Liaoning”
======有效的XML文件=====
一、对XML的数据结构进行限制有两种方式:
1)使用文档类型定义(Document Type Definition,DTD)
2)XML Schema模式。
DTD的使用要早与XML Schema模式,DTD和XML Schema模式各有所长,
但XML Schema模式比DTD更为复杂。
注意:
一个规范的XML文件如果和某个DTD文件相关联,并遵守该DTD文件规定的限制条件,
就称为有效的XML文件。DTD文件的编码必须和其关联的XML文件一致
二、SYSTEM关联
<!DOCTYPE 根标记的名称 SYSTEM "DTD文件的URI">
例如:
<!DOCTYPE employee SYSTEM "a0.dtd">
SYSTEM关联表明所关联的DTD文件由个人或工作小组所定义且认可
三、PUBLIC关联
PUBLIC关联型的文档类型声明格式:
<DOCTYPE根标记的名称 PUBLIC "正式公用标识符" "DTD文件的URI">
例如:
<!DOCTYPE employee PUBLIC "-//ISO123456/Daxian/ForXML/EN" "a0.dtd">
PUBLIC关联表明所关联的DTD文件已经得到某一领域的认可,是经过许多人讨论得到认可的DTD文件。
四、内部DTD应用
我们也可以把DTD文件的内容直接写在XML文件的内部,相对外部DTD文件,
这样的内容称做XML文件的内部DTD
在XML文件中,内部DTD用“<!DOCTYPE 根标记名称 [”开始,以“]>”结束
<!DOCTYPE 列车时刻表 [
<!ELEMENT 列车时刻表 (T28次,T226次) >
<!ELEMENT T28次 (开车时间,终到时间) >
<!ELEMENT T226次 (开车时间,终到时间) >
<!ELEMENT 开车时间 (hour,minute) >
<!ELEMENT 终到时间 (hour,minute) >
<!ELEMENT hour (#PCDATA) >
<!ELEMENT minute (#PCDATA) >
]>
<!DOCTYPE 根标记名称[
......
]>
五、外部DTD应用实例
dtdFile.dtd文件内容
<!ELEMENT 列车时刻表 (T28次,T226次) >
<!ELEMENT T28次 (开车时间,终到时间) >
<!ELEMENT T226次 (开车时间,终到时间) >
<!ELEMENT 开车时间 (hour,minute) >
<!ELEMENT 终到时间 (hour,minute) >
<!ELEMENT hour (#PCDATA) >
<!ELEMENT minute (#PCDATA) >
xmlDTD.xml文件内容
<!DOCTYPE 列车时刻表 PUBLIC "-//ISO88/China/xml/CH" "dtdFile.dtd">
<列车时刻表>
<T28次>
<开车时间>
<hour>23点</hour>
<minute> 12分</minute>
</开车时间>
<终到时间>
<hour>23点</hour>
<minute> 12分</minute>
</终到时间>
</T28次>
<T226次>
<开车时间>
<hour>08点</hour>
<minute>45分</minute>
</开车时间>
<终到时间>
<hour>19点</hour>
<minute>36分</minute>
</终到时间>
</T226次>
</列车时刻表>
六、DTD的元素
1、DTD中的元素(ELEMENT)是用来约束XML文件中的标记,
<!ELEMENT 标记名称 标记的约束条件 >
<!ELEMENT 列车时刻表 (T28次,T29次) >
约束标记“列车时刻表” 只可以有且必须有两个子标记“T28次”和“T29次”。
2、规定标记的子标记
<!ELEMENT 标记名称 (子标记列表) >
<!ELEMENT 开车时间 (hour,minute) >
要求标记“开车时间” 恰好有两个子标记“hour”和“minute”,不可以有能显示的文本数据,
并且子标记在父标记“开车时间”中出现的顺序必须是“hour”、“minute”
而不是 “minute”、“hour”.
3、限制标记只有文本数据
<!ELEMENT 标记名称 (#PCDATA) >
4、定义混合元素(既有字符串内容,又包含子元素)
<!ELEMENT 父元素名 (#PCDATA) | 子元素1 | 子元素2
5、EMPTY和ANY
如果准备约束一个标记是空标记,或者是只含有空字符的非空标记,
元素的“标记的约束条件”可以是关键字“EMPTY”;
如果不准备对一个标记有任何约束,元素的“标记的约束条件”可以是关键字“ANY”。
<!ELEMENT speak EMPTY >
<!ELEMENT hello ANY >
七、DTD中的属性
1、ATTLIST声明
DTD中的属性列表(ATTLIST)可用来约束XML文件中标记的属性,在DTD中属性列表的声明格式为:
<!ATTLIST 标记名称
属性名称 属性类型 默认值情况
属性名称 属性类型 默认值情况
… ….
>
(1)属性名称
属性名称的命名规则和标记的命名规则相同,可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,但必须以字母或下划线开头。
(2)属性类型
我们已经知道属性值一定是一个字符串,那么属性类型就决定了属性可以用怎样的字符串作为属性的值。
(3)默认值情况
ATTLIST声明是为了约束XML文件中标记的属性,ATTLIST声明中关于属性的“默认值情况”是对XML文件中标记的属性进行约束的细节条件
属性的默认值可以是字符串、关键字(#IMPLIED、#REQUIRED、#FIXED)
#REQUIRED:必要的属性,意味着必须为该元素提供该属性
<!ATTLIST 作者 地址 CDATA #REQUIRED>
#IMPLIED:该属性是可有可无的
#FIXED:该属性的值是固定的,定义时必须指定固定的值
<!ATTLIST 作者 地址 CDATA #FIXED “广州”>
属性类型:
1、CDATA类型(该属性的值可以是任何一个字符串)
注意:字符串中不能含有含有左尖括号、右尖括号、与符号、单引号和双引号
2、枚举类型:
<!ATTLIST 肉 类型(鸡|牛肉|猪肉|鱼肉) #REQUIRED>
3、NMTOKEN类型
如果属性的类型是NMTOKEN类型的属性,属性值可以
由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,
属性值中不能含有空格字符(属性值也可以用数字、点或连字符开头)
4、NMTOKENS类型
对于NMTOKEN类型的属性,其属性值中不能含有空白类字符。
如果需要某个属性的属性值含有空白类字符,而且被空白分隔开的子字符串符合NMTOKEN类型属性的属性值之规定,
那么就可以将属性的类型取为NMTOKENS类型。
八、实体的应用
实体分类:普通实体和参数实体
1)普通实体语法如下:
语法格式:<!ENTITY 实体名 "实体值">
使用实体:&实体名;(必须以&开始,以英文分号结束)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE entity [
<!ENTITY hello "How are you,&你好" >
]>
<entity>
&hello;
</entity>
2)参数实体的应用:
语法格式:<!ENTITY % 实体名 "实体值">
引用参数实体:%实体名;
定义参数实体:
<!ENTITY % boolean "yes|no|true|false">
引用参数实体
<!ATTLIST 书名 islast (%boolean;) #REQUIRED>
外部实体引用
myentity.txt
<?xml version="1.0" encoding="UTF-8" ?>
这是一个外部实体
<外部实体></外部实体>
<!ELEMENT 实体名 SYSTEM "实体值所在文件的URI">
outerentity.dtd
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY outer SYSTEM "myentity.txt">
book.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 书名 SYSTEM "outerentity.dtd">
<!-- 引用外部实体 -->
<书名 islast="no">&outer;</书名>
外部参数实体的应用
语法格式:<!ELEMENT % 实体名 SYSTEM "实体值所在文件的URI">
myprops.txt
<?xml version="1.0" encoding="UTF-8" ?>
是
outerentity.dtd
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 定义外部参数实体 -->
<!ENTITY % outer_props SYSTEM "myprops.txt">
<!ATTLIST 书名 islast CDATA "%outer_props;">
1、XML的基本概念、语法
2、DTD的文档编写
3、Schema文档的编写
4、dom4j解析xml文档
一、XML简介
XML被设计用来传输和存储数据
HTML被设计用来显示数据
二、什么是XML?
1)XML 指可扩展标记语言(EXtensible Markup Language)。
HTML的含义:超文本标记语言(超:图像、音频、文本等)
HTML中内部的标签(预先定义)
2)XML 是一种很像HTML的标记语言。
3)XML 的设计宗旨是传输数据,而不是显示数据。
4)XML 标签没有被预定义。您需要自行定义标签。
5)XML 被设计为具有自我描述性。
6)XML 是 W3C 的推荐标准。
XML的语法规则:
XML文档必须有根元素
XML声明(XML 声明文件的可选部分,如果存在需要放在文档的第一行)
所有的 XML 元素都必须有一个关闭标签
XML 标签对大小写敏感
XML 必须正确嵌套
XML 属性值必须加引号
在 XML 中,空格会被保留
三、XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
1)XML 被设计用来传输和存储数据,其焦点是数据的内容。
2)HTML 被设计用来显示数据,其焦点是数据的外观。
3)HTML 旨在显示信息,而 XML 旨在传输信息。
四、一个 XML 文档实例
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。
五、特殊符号
< 引用左尖括号:“<”
> 引用右尖括号“>”
' 引用单引号“'”
" 引用双引号“"”
& 引用与符号“&”
六、<![CDATA[" 开始,由 "]]>
CDATA 部分中的所有内容都会被解析器忽略。
七、属性
属性是指标记的属性,可以为标记添加附加信息。
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<桌子 width="300" height="600" length="1000">
吃饭用的
</桌子>
<椅子 color="red" />
</root>
八、注释
<!--”开始,以“-->”结束
九、名称空间
1、名称空间的目的是有效的区分名字相同的标记,
当两个标记的名字相同时,它们可以通过隶属不同的名称空间来相互区分。
2、名称空间通过使用声明名称空间来建立,分为有前缀名称空间和无前缀名称空间
有前缀名称空间:
有前缀的名称空间的语法如下:
xmlns:前缀=名称空间的名字
例如:
xmlns:person=“22030262029023”
声明了一个名字为“22030262029023”的名称空间
无前缀命名空间
无前缀的名称空间声明语法如下:
xmlns=名称空间的名字
例如:
xmlns =www.tup.com
例如:
<p1:张山 xmlns:p1="Liaoning">
1976年出生,大学毕业。
<p1:小张山>
在小学读书
</p1:小张山>
</p1:张山>
上述XML中的“张山”和“小张山”隶属同一个名称空间:“Liaoning”
======有效的XML文件=====
一、对XML的数据结构进行限制有两种方式:
1)使用文档类型定义(Document Type Definition,DTD)
2)XML Schema模式。
DTD的使用要早与XML Schema模式,DTD和XML Schema模式各有所长,
但XML Schema模式比DTD更为复杂。
注意:
一个规范的XML文件如果和某个DTD文件相关联,并遵守该DTD文件规定的限制条件,
就称为有效的XML文件。DTD文件的编码必须和其关联的XML文件一致
二、SYSTEM关联
<!DOCTYPE 根标记的名称 SYSTEM "DTD文件的URI">
例如:
<!DOCTYPE employee SYSTEM "a0.dtd">
SYSTEM关联表明所关联的DTD文件由个人或工作小组所定义且认可
三、PUBLIC关联
PUBLIC关联型的文档类型声明格式:
<DOCTYPE根标记的名称 PUBLIC "正式公用标识符" "DTD文件的URI">
例如:
<!DOCTYPE employee PUBLIC "-//ISO123456/Daxian/ForXML/EN" "a0.dtd">
PUBLIC关联表明所关联的DTD文件已经得到某一领域的认可,是经过许多人讨论得到认可的DTD文件。
四、内部DTD应用
我们也可以把DTD文件的内容直接写在XML文件的内部,相对外部DTD文件,
这样的内容称做XML文件的内部DTD
在XML文件中,内部DTD用“<!DOCTYPE 根标记名称 [”开始,以“]>”结束
<!DOCTYPE 列车时刻表 [
<!ELEMENT 列车时刻表 (T28次,T226次) >
<!ELEMENT T28次 (开车时间,终到时间) >
<!ELEMENT T226次 (开车时间,终到时间) >
<!ELEMENT 开车时间 (hour,minute) >
<!ELEMENT 终到时间 (hour,minute) >
<!ELEMENT hour (#PCDATA) >
<!ELEMENT minute (#PCDATA) >
]>
<!DOCTYPE 根标记名称[
......
]>
五、外部DTD应用实例
dtdFile.dtd文件内容
<!ELEMENT 列车时刻表 (T28次,T226次) >
<!ELEMENT T28次 (开车时间,终到时间) >
<!ELEMENT T226次 (开车时间,终到时间) >
<!ELEMENT 开车时间 (hour,minute) >
<!ELEMENT 终到时间 (hour,minute) >
<!ELEMENT hour (#PCDATA) >
<!ELEMENT minute (#PCDATA) >
xmlDTD.xml文件内容
<!DOCTYPE 列车时刻表 PUBLIC "-//ISO88/China/xml/CH" "dtdFile.dtd">
<列车时刻表>
<T28次>
<开车时间>
<hour>23点</hour>
<minute> 12分</minute>
</开车时间>
<终到时间>
<hour>23点</hour>
<minute> 12分</minute>
</终到时间>
</T28次>
<T226次>
<开车时间>
<hour>08点</hour>
<minute>45分</minute>
</开车时间>
<终到时间>
<hour>19点</hour>
<minute>36分</minute>
</终到时间>
</T226次>
</列车时刻表>
六、DTD的元素
1、DTD中的元素(ELEMENT)是用来约束XML文件中的标记,
<!ELEMENT 标记名称 标记的约束条件 >
<!ELEMENT 列车时刻表 (T28次,T29次) >
约束标记“列车时刻表” 只可以有且必须有两个子标记“T28次”和“T29次”。
2、规定标记的子标记
<!ELEMENT 标记名称 (子标记列表) >
<!ELEMENT 开车时间 (hour,minute) >
要求标记“开车时间” 恰好有两个子标记“hour”和“minute”,不可以有能显示的文本数据,
并且子标记在父标记“开车时间”中出现的顺序必须是“hour”、“minute”
而不是 “minute”、“hour”.
3、限制标记只有文本数据
<!ELEMENT 标记名称 (#PCDATA) >
4、定义混合元素(既有字符串内容,又包含子元素)
<!ELEMENT 父元素名 (#PCDATA) | 子元素1 | 子元素2
5、EMPTY和ANY
如果准备约束一个标记是空标记,或者是只含有空字符的非空标记,
元素的“标记的约束条件”可以是关键字“EMPTY”;
如果不准备对一个标记有任何约束,元素的“标记的约束条件”可以是关键字“ANY”。
<!ELEMENT speak EMPTY >
<!ELEMENT hello ANY >
七、DTD中的属性
1、ATTLIST声明
DTD中的属性列表(ATTLIST)可用来约束XML文件中标记的属性,在DTD中属性列表的声明格式为:
<!ATTLIST 标记名称
属性名称 属性类型 默认值情况
属性名称 属性类型 默认值情况
… ….
>
(1)属性名称
属性名称的命名规则和标记的命名规则相同,可以由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,但必须以字母或下划线开头。
(2)属性类型
我们已经知道属性值一定是一个字符串,那么属性类型就决定了属性可以用怎样的字符串作为属性的值。
(3)默认值情况
ATTLIST声明是为了约束XML文件中标记的属性,ATTLIST声明中关于属性的“默认值情况”是对XML文件中标记的属性进行约束的细节条件
属性的默认值可以是字符串、关键字(#IMPLIED、#REQUIRED、#FIXED)
#REQUIRED:必要的属性,意味着必须为该元素提供该属性
<!ATTLIST 作者 地址 CDATA #REQUIRED>
#IMPLIED:该属性是可有可无的
#FIXED:该属性的值是固定的,定义时必须指定固定的值
<!ATTLIST 作者 地址 CDATA #FIXED “广州”>
属性类型:
1、CDATA类型(该属性的值可以是任何一个字符串)
注意:字符串中不能含有含有左尖括号、右尖括号、与符号、单引号和双引号
2、枚举类型:
<!ATTLIST 肉 类型(鸡|牛肉|猪肉|鱼肉) #REQUIRED>
3、NMTOKEN类型
如果属性的类型是NMTOKEN类型的属性,属性值可以
由字母、数字、下划线(“_”)、点(“.”)或连字符(“-”)组成,
属性值中不能含有空格字符(属性值也可以用数字、点或连字符开头)
4、NMTOKENS类型
对于NMTOKEN类型的属性,其属性值中不能含有空白类字符。
如果需要某个属性的属性值含有空白类字符,而且被空白分隔开的子字符串符合NMTOKEN类型属性的属性值之规定,
那么就可以将属性的类型取为NMTOKENS类型。
八、实体的应用
实体分类:普通实体和参数实体
1)普通实体语法如下:
语法格式:<!ENTITY 实体名 "实体值">
使用实体:&实体名;(必须以&开始,以英文分号结束)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE entity [
<!ENTITY hello "How are you,&你好" >
]>
<entity>
&hello;
</entity>
2)参数实体的应用:
语法格式:<!ENTITY % 实体名 "实体值">
引用参数实体:%实体名;
定义参数实体:
<!ENTITY % boolean "yes|no|true|false">
引用参数实体
<!ATTLIST 书名 islast (%boolean;) #REQUIRED>
外部实体引用
myentity.txt
<?xml version="1.0" encoding="UTF-8" ?>
这是一个外部实体
<外部实体></外部实体>
<!ELEMENT 实体名 SYSTEM "实体值所在文件的URI">
outerentity.dtd
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY outer SYSTEM "myentity.txt">
book.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 书名 SYSTEM "outerentity.dtd">
<!-- 引用外部实体 -->
<书名 islast="no">&outer;</书名>
外部参数实体的应用
语法格式:<!ELEMENT % 实体名 SYSTEM "实体值所在文件的URI">
myprops.txt
<?xml version="1.0" encoding="UTF-8" ?>
是
outerentity.dtd
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 定义外部参数实体 -->
<!ENTITY % outer_props SYSTEM "myprops.txt">
<!ATTLIST 书名 islast CDATA "%outer_props;">