XML笔记.docx

上传人:b****4 文档编号:3779756 上传时间:2022-11-25 格式:DOCX 页数:22 大小:23.84KB
下载 相关 举报
XML笔记.docx_第1页
第1页 / 共22页
XML笔记.docx_第2页
第2页 / 共22页
XML笔记.docx_第3页
第3页 / 共22页
XML笔记.docx_第4页
第4页 / 共22页
XML笔记.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

XML笔记.docx

《XML笔记.docx》由会员分享,可在线阅读,更多相关《XML笔记.docx(22页珍藏版)》请在冰豆网上搜索。

XML笔记.docx

XML笔记

XML笔记

第一天:

1、XML是什么?

(1)XML是一种元标记语言

标记语言:

由标记和代码组成,告诉应用程序如何处理。

特殊用途标记语言:

HTML(HyperTextMarkupLanguage)

例子:

xmlversion="1.0"?

>

--sample-->

java

mli

c++

sherry

一般用途标记语言:

SGML(StandardGeneralizedMarkuplanguage)

(2)XML的核心是数据

文档的三个组成部分:

数据、结构、样式(示例:

书信)

XML将文档数据与文档样式(XSL,CSS)、结构分离(DTD,SCHEMA)。

(3)XML文档的树型结构

示例:

first.xml

(4)XML的优点

自我描述性

内容与样式分离

支持Unicode字符集

(5)XML的使用场合

1、数据交换

2、Web服务

3、内容管理

4、Web集成

5、配制

2、XML文档的框架结构

XML文档=序言+元素+杂项(可选)

1)序言

序言=(XML声明)+(杂项)+(文档类型声明)

XML声明

xml版本信息(编码信息)(文档独立性信息)?

>

如:

xmlversion="1.0"encoding="gb2312"standalone="yes"?

>

文档类型声明

规定元素的结构和属性列表的取值

如:

DOCTYPEstudinfoSYSTEM"studinfo.dtd">

2)元素

空元素

<空元素标签名属性="属性值"/>

非空元素

<起始标签>内容<结束标签>

内容=(子元素|字符数据|字符数据段|引用|处理指令|注释)*

子元素

字符数据

字符数据中,不能含有&,<,>,',",需要采用实体引用的方式

字符数据段

[CDATA[字符数据]]>

引用

实体引用

例子:

xmlversion="1.0"encoding="gb2312"?

>

--thisisacomment

hehe

-->

张19977

--------------------------------------------------------------------------------

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[

ELEMENTstudinfo(#PCDATA)>]>

//定义之后不能在到他们之间加入字符串引入了

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的验证.

xmlversion="1.0"standalone="no"?

>

定义注释语句.

可以用两种方式来调用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标签语句主体开始,并因为上面声明的属性必需提供属性值.

定义子元素的值

chengzh

28

定义孙子元素的值

hegh

23

可以支持多个student子元素,因为”+”声明了多个

chenzy

24

名域

1、作用:

解决XML文档中命名冲突的问题,即将

XML文档与引用URI标识的名域相结合,来

限定其中的元素和属性名。

2、名域的声明

(1)直接定义

xmlns:

名域前缀="名域的URI"(唯一性)

类比:

名字与身份证

(2)缺省定义

xmlns=名域的URI

3、名域的使用

(1)用名域限定元素

(2)用名域限定属性

4、名域的作用范围

名域能够把声明它的元素和该元素的所有子元素

关联起来,除非它们被其他的名域声明所覆盖。

例子:

文件名为:

namespace.xml

xmlversion="1.0"encoding="UTF-8"standalone="yes"?

>

--namespace-->

下面的name可以为任意名字.Boy为第一域名空间.由关键字xmlns来指定第二域名空间.区别两个域名空间之间子元素.避免名字相同的子元素冲突.

namexmlns="hello!

"

xmlns:

girl="love!

">

chengzh

28

name>zhangbz

name>

age>25

age>

name>

或:

xmlversion="1.0"encoding="UTF-8"standalone="yes"?

>

--namespace-->

boy="hello!

"

xmlns:

girl="love!

">

chengzh

28

name>zhangbz

name>

age>25

age>

 

第二天:

一,xml文件(二与三都是针对一操作)<介绍schema功能>

xmlversion="1.0"encoding="UTF-8"?

>

--定义xsd文件的位置,如果xsd没有定义目标名域,就必需用以下noN***来定义位置-->

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文件路径名",如:

xsi:

schemaLocation="http:

//www.sd0606/student这是目标名字空间

/home/soft01/heguanhua/workspace/corejava/XML/student3.xsd"这是原文件路径名

然后在把student换成tc:

studentxmlns:

tc="http:

//www.sd0606/student"来指定目标名称空间-->

shang

zhang

20

ll

aa

--

1,age的值必须是数字

2,name的值必须是字符串

3,name,age的顺序必须有先后顺序

4,student是根元素

5,name为复杂元素,包含两个子元素

6,在student3.xml里面来定义限制age在10-30之间和把name定义为枚举类型,为id定义属性

定义两个子元素为可选项,至少选择一个.

-->

 

二,

xmlversion="1.0"encoding="UTF-8"?

>

--xsd与xsd之间引用:

在下面语句中加入xmln:

tc="http:

//www.sd0606/student"来指定地址空间

并加入:

importnamespace="http:

//www.sd0606/student"

schemaLocation="/home/soft01/heguanhua/workspace/corejava/XML/student3.xsd">

import>

来指定所要引用xsd文件的目标名字空间和文件路径名-->

//www.w3.org/2001/XMLSchema">

elementname="student">

complexType>

--元素有子元素或有属性,所以得定义成复杂类型-->

sequence>

--定义元素出现的顺序-->

elementref="name">

--用xs:

element元素来引用name子元素-->

element>

elementref="age">

--用xs:

element元素来引用age子元素-->

element>

sequence>

complexType>

element>

--定义name子元素为复杂类型,并定义其两个孙子元素-->

elementname="name">

compleType>

sequence>

--利用ref来引用外部的两个已定义的孙子元素-->

elementref="firstname">

element>

elementref="lastname">

element>

sequence>

compleType>

element>

--定义两个孙子元素,并定义字符串类型由schema指定-->

elementname="firstname"type="xs:

string">

element>

elementname="lastname"type="xs:

string">

element>

--age元素名称,并定义为整型-->

elementname="age"type="xs:

int">

element>

 

三,

xmlversion="1.0"encoding="UTF-8"?

>

schemaxmlns:

xs="

http:

//www.w3.org/2001/XMLSchema"

xmlns:

tc="http:

//www.sd0606/student"

targetNamespace="http:

//www.sd0606/student">

--由xmlns:

tc来引入原名称空间-->

--当前xsd文件所定义的类型属于targetNamespace所指定的空间-->

elementname="student">

complexType>

sequence>

--定义了一个names类型,在以下得到调用.可以用maxOccurs="unbounded"来声明可用多个name子元素-->

elementname="name"type="names"maxOccurs="unbounded">

element>

--把age元素定义为一个stuage类型,并通过下面的自定义简单类型实现-->

elementname="age"type="tc:

stuage">

element>

choice>

--用于可选项,但必须至少选一个元素-->

elementref="father">

element>

elementref="mother">

element>

choice>

sequence>

--定义student的属性-->

elementname="id"type="xs:

string"use="required">

element>

complexType>

element>

--自定义简单类型,一般用于扩展基本数据类型-->

simpleTypename="stuage">

--用于限制数据类型扩展,base为基于什么类型-->

restrictionbase="xs:

int">

--minInclusive表示大于等于-->

minInclusivevalue="10">

minInclusive>

--minInclusive表示小于等于-->

maxInclusivevalue="30">

maxInclusive>

restriction>

simpleType>

--自定义简单类型,实现name元素的枚举功能-->

simpleTypename="names">

--用于限制数据类型扩展,base为基于字符串类型-->

restrictionbase="xs:

string">

--枚举类型定义,值以value指定-->

enumerationvalue="zhang">

enumeration>

enumerationvalue="san">

enumeration>

restriction>

simpleType>

--自定义简单类型.实现对子元素的可选功能-->

simpleType>

--两个子元素至少选择一个,并限制为字符串类型-->

elementname="father"type="xs:

string">

element>

elementname="mother"type="xs:

string">

element>

simpleType>

schema>

 

解析器SAX与DOM

一,SAX解析器:

事件驱动。

当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。

  优点:

不用事先调入整个文档,占用资源少;

SAX解析器代码比DOM解析器代码小,适于Applet,下载

  缺点:

不是持久的;事件过后,若没保存数据,那么数据就丢了;

无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;

  使用场合:

Applet;只需XML文档的少量内容,很少回头访问;机器内存少

 

SAX处理流程

xmlversion="1.0"?

>

UNIX

color

分析这个代码片断的SAX处理器一般情况下将产生以下事件:

Startdocument

Startelement(samples)

Characters(whitespace)

Startelement(server)

Characters(UNIX)

Endelement(server)

Characters(whitespace)

Startelement(monitor)

Characters(color)

Endelement(monitor)

Characters(whitespace)

Endelement(samples)

SAXAPI允许开发人员捕捉这些事件并对它们作出反应。

SAX处理涉及以下步骤:

创建一个事件处理程序。

创建SAX解析器。

向解析器分配事件处理程序。

解析文档,同时向事件处理程序发送每个事件。

 

选择DOM还是选择SAX,这取决于下面几个因素:

应用程序的目的:

数据容量:

数据多少部分会被使用

对速度的需要:

对程序的实现:

1,XML文件(所要解析的文件)

xmlversion="1.0"encoding="UTF-8"standalone="yes"?

>

t1

t2

2,解析器程序:

(一)

packagesax.exec;

importjava.util.Properties;

importjavax.xml.parsers.SAXParser;

importjavax.xml.parsers.SAXParserFactory;

import

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1