XML笔记Word下载.docx
《XML笔记Word下载.docx》由会员分享,可在线阅读,更多相关《XML笔记Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
4、Web集成
5、配制
2、XML文档的框架结构
XML文档=序言+元素+杂项(可选)
1)序言
序言=(XML声明)+(杂项)+(文档类型声明)
XML声明
<
xml版本信息(编码信息)(文档独立性信息)?
如:
encoding="
gb2312"
standalone="
yes"
文档类型声明
规定元素的结构和属性列表的取值
DOCTYPEstudinfoSYSTEM"
studinfo.dtd"
2)元素
空元素
空元素标签名属性="
属性值"
/>
非空元素
起始标签>
内容<
结束标签>
内容=(子元素|字符数据|字符数据段|引用|处理指令|注释)*
子元素
字符数据
字符数据中,不能含有&
<
>
'
"
需要采用实体引用的方式
字符数据段
<
[CDATA[字符数据]]>
引用
实体引用
--thisisacomment
hehe
-->
student>
script>
--字31526数25454-->
&
lt;
hello&
gt;
quot;
zhangshan&
amp;
apos;
lishi&
--字31526数25454段-->
[CDATA[
functioncompare(a,b){
if(a>
b)
then{return1}
else{return0}
}]]>
/script>
namecountry="
china"
张19977<
/name>
/student>
--------------------------------------------------------------------------------
3)杂项
处理指令
XML为其它应用程序准备的接口。
处理指令?
注释
--注释内容-->
空白符
指空格、回车等
3、格式良好的XML文档
(1)文档声明位于文件的开头,“xml"
与“<
"
之间无空格!
(2)唯一根元素
(3)标记必须闭合
(4)层层嵌套
(5)大小写敏感
(6)属性必须使用引号
(7)注意特殊字符
DTD笔记
1.DTD是什么?
文档类型定义
2.DTD的调用
方式一:
调用内部文档类型定义。
注意点:
(1)studinfo与(#PCDATA)有空格
如:
限定在这段代码中使用字符串:
ELEMENTstudinfo(#PCDATA)>
(2)文档类型名与根元素名必须一致
方式二:
调用外部文档类型定义,
(1)standalone="
no"
(2)注意dtd文件的路径
xmlversion=”1.0”standalone=”no”?
DOCTYPEstudinfo[<
]>
studinfo>
/studinfo>
//定义之后不能在到他们之间加入字符串引入了
DOCTYPE:
引入一个文档类型的申明
studinfo:
文档类型名,
SYSTEM:
关键字
3.DTD的结构
元素类型声明
指明元素的名称和元素含有的内容。
元素类型声明=<
ELEMENT元素名(元素内容说明)元素内容说明='
EMPTY'
|'
ANY'
|混合内容|元素内容|'
#PCDATA'
#PCDATA:
只有可析的字符数据才能作为元素的内容
元素内容:
元素内部只能出现指定的子元素
示例dtd3.xml,studinfo3.dtd
EMPTY内容:
示例dtd4.xml,studinfo4.dtd
ANY:
混合内容:
标记文本和可析字符串
属性表声明
属性:
由“=”分隔的成对的属性名和属性值构成,只能出现在元素标记的内部。
结束标记不能带属性,一个元素可以具有多个属性
语法:
ATTLIST对应的元素名属性名属性取值类型属性默认值>
属性取值类型
1、CDATA:
可析字符
2、Enumerated:
枚举类型,由“|”分隔的可能的属性值列表
属性默认值:
注意
1、#REQUIRED:
必须提供属性值
2、IMPLIED:
可提供也可不提供
3、FIXED:
不能修改
实体声明
实体:
存储了任意符合规则的xml文档单元片断。
1、内部通用实体
定义格式
ENTITY实体名“实体内容”>
引用格式
&
实体名;
2、外部通用实体
ENTITY实体名SYSTEM“外部实体的URI”>
声明为是一个xml,支持版本为1.0的文件,并需要DTD的验证.
定义注释语句.
可以用两种方式来调用DTD文件:
1,内部引用:
可以把注释语句中的代码作为正常运行语句,用<
DOCTYPEteacher[]>
来包含在中括号里面.而不需要注释下面那一语句.其它语句不变.
2,外部引用:
将注释中的代码另外生成一个名为:
teacher.dtd文件,然后在teacher.xml文件中就使用以下语句进行调用即可.
--
定义一个元素teacher,并包含三个子元素,而且student+为在调用时可支持多个student子元素.
ELEMENTteacher(name,age,student+)>
定义子元素,并定义为只可析的字符数据才能作为元素的内容
ELEMENTname(#PCDATA)>
ELEMENTage(#PCDATA)>
定义子元素,并把这个子元素作为继续包含孙子元素的父元素,因为上面定义过了这两个孙子元素同名的子元素.所以以下可以不在定义这两个孙子元素.
ELEMENTstudent(name,age)>
定义teacher元素的熟悉course,CDATA:
可析字符,#REQUIRED:
调用语句中必须提供属性值
ATTLISTteachercourseCDATA#REQUIRED>
定义一个枚举类型,并设置默认值为fish.
ATTLISTteachercourse(fish|play|read)"
fish"
>
用于外部调用语句,在没有上面语句时,可以调用teacher.dtd来验证dtd文件.
DOCTYPEteacherSYSTEM"
teacher.dtd"
xml标签语句主体开始,并因为上面声明的属性必需提供属性值.
teachercourse="
math"
定义子元素的值
name>
chengzh<
age>
28<
/age>
定义孙子元素的值
hegh<
23<
可以支持多个student子元素,因为”+”声明了多个
chenzy<
24<
/teacher>
名域
1、作用:
解决XML文档中命名冲突的问题,即将
XML文档与引用URI标识的名域相结合,来
限定其中的元素和属性名。
2、名域的声明
(1)直接定义
xmlns:
名域前缀="
名域的URI"
(唯一性)
类比:
名字与身份证
(2)缺省定义
xmlns=名域的URI
3、名域的使用
(1)用名域限定元素
(2)用名域限定属性
4、名域的作用范围
名域能够把声明它的元素和该元素的所有子元素
关联起来,除非它们被其他的名域声明所覆盖。
文件名为:
namespace.xml
UTF-8"
--namespace-->
下面的name可以为任意名字.Boy为第一域名空间.由关键字xmlns来指定第二域名空间.区别两个域名空间之间子元素.避免名字相同的子元素冲突.
boy:
namexmlns="
hello!
xmlns:
girl="
love!
girl>
girl:
zhangbz<
/girl:
25<
/girl>
/boy:
或:
boyxmlns:
boy="
/boy>
第二天:
一,xml文件(二与三都是针对一操作)<
介绍schema功能>
--定义xsd文件的位置,如果xsd没有定义目标名域,就必需用以下noN***来定义位置-->
studentxmlns:
xsi="
http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
noNamespaceSchemaLocation="
/home/soft01/heguanhua/workspace/corejava/XML/student1.xsd"
id="
1000"
--xml来引用xsd
如果引用的xsd文件定义了目标名称空间的话,就要把noN***换成schemaLocation="
xsd文件路径名"
如:
schemaLocation="
//www.sd0606/student这是目标名字空间
/home/soft01/heguanhua/workspace/corejava/XML/student3.xsd"
这是原文件路径名
然后在把student换成tc:
tc="
//www.sd0606/student"
来指定目标名称空间-->
firstname>
shang<
/firstname>
lastname>
zhang<
/lastname>
20
mother>
ll<
/mother>
father>
aa<
/father>
1,age的值必须是数字
2,name的值必须是字符串
3,name,age的顺序必须有先后顺序
4,student是根元素
5,name为复杂元素,包含两个子元素
6,在student3.xml里面来定义限制age在10-30之间和把name定义为枚举类型,为id定义属性
定义两个子元素为可选项,至少选择一个.
二,
--xsd与xsd之间引用:
在下面语句中加入xmln:
来指定地址空间
并加入:
xs:
importnamespace="
schemaLocation="
/xs:
import>
来指定所要引用xsd文件的目标名字空间和文件路径名-->
schemaxmlns="
//www.w3.org/2001/XMLSchema"
elementname="
student"
complexType>
--元素有子元素或有属性,所以得定义成复杂类型-->
sequence>
--定义元素出现的顺序-->
elementref="
name"
--用xs:
element元素来引用name子元素-->
element>
age"
element元素来引用age子元素-->
--定义name子元素为复杂类型,并定义其两个孙子元素-->
compleType>
--利用ref来引用外部的两个已定义的孙子元素-->
firstname"
lastname"
--定义两个孙子元素,并定义字符串类型由schema指定-->
type="
string"
--age元素名称,并定义为整型-->
int"
/schema>
三,
schemaxmlns:
xs="
xmlns:
targetNamespace="
--由xmlns:
tc来引入原名称空间-->
--当前xsd文件所定义的类型属于targetNamespace所指定的空间-->
--定义了一个names类型,在以下得到调用.可以用maxOccurs="
unbounded"
来声明可用多个name子元素-->
names"
maxOccurs="
--把age元素定义为一个stuage类型,并通过下面的自定义简单类型实现-->
tc:
stuage"
<
choice>
--用于可选项,但必须至少选一个元素-->
<
father"
mother"
--定义student的属性-->
id"
use="
required"
--自定义简单类型,一般用于扩展基本数据类型-->
simpleTypename="
--用于限制数据类型扩展,base为基于什么类型-->
restrictionbase="
--minInclusive表示大于等于-->
minInclusivevalue="
10"
minInclusive>
--minInclusive表示小于等于-->
maxInclusivevalue="
30"
maxInclusive>
restriction>
simpleType>
--自定义简单类型,实现name元素的枚举功能-->
--用于限制数据类型扩展,base为基于字符串类型-->
--枚举类型定义,值以value指定-->
enumerationvalue="
zhang"
enumeration>
san"
--自定义简单类型.实现对子元素的可选功能-->
--两个子元素至少选择一个,并限制为字符串类型-->
schema>
解析器SAX与DOM
一,SAX解析器:
事件驱动。
当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。
优点:
不用事先调入整个文档,占用资源少;
SAX解析器代码比DOM解析器代码小,适于Applet,下载
缺点:
不是持久的;
事件过后,若没保存数据,那么数据就丢了;
无状态性;
从事件中只能得到文本,但不知该文本属于哪个元素;
使用场合:
Applet;
只需XML文档的少量内容,很少回头访问;
机器内存少
SAX处理流程
samples>
server>
UNIX<
/server>
monitor>
color<
/monitor>
/samples>
分析这个代码片断的SAX处理器一般情况下将产生以下事件:
Startdocument
Startelement(samples)
Characters(whitespace)
Startelement(server)
Characters(UNIX)
Endelement(server)
Startelement(monitor)
Characters(color)
Endelement(monitor)
Endelement(samples)
SAXAPI允许开发人员捕捉这些事件并对它们作出反应。
SAX处理涉及以下步骤:
创建一个事件处理程序。
创建SAX解析器。
向解析器分配事件处理程序。
解析文档,同时向事件处理程序发送每个事件。
选择DOM还是选择SAX,这取决于下面几个因素:
应用程序的目的:
数据容量:
数据多少部分会被使用
对速度的需要:
对程序的实现:
1,XML文件(所要解析的文件)
dbconfig>
username>
t1<
/username>
password>
t2<
/password>
/dbconfig>
2,解析器程序:
(一)
packagesax.exec;
importjava.util.Properties;
importjavax.xml.parsers.SAXParser;
importjavax.xml.parsers.SAXParserFactory;
import