XML.docx

上传人:b****8 文档编号:10447493 上传时间:2023-02-11 格式:DOCX 页数:20 大小:22.55KB
下载 相关 举报
XML.docx_第1页
第1页 / 共20页
XML.docx_第2页
第2页 / 共20页
XML.docx_第3页
第3页 / 共20页
XML.docx_第4页
第4页 / 共20页
XML.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

XML.docx

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

XML.docx

XML

 

一、XML的背景

 

XML第一天

 

2007年5月25日

1)XML代表扩展的标记语言(eXtensibleMarkupLanguage);

2)XML由W3C联盟发展维护;

3)XML是一种元语言,可以用来定义其它标签语言;

4)XML没有定义任何标记,它提供了一种工具定义标记以及它们之间的结构关系;

5)XML是一种用于结构化文本交换的标记语言;

6)XML代表了内容的结构也代表了内容本身;

7)XML继承自SGML(标准标记语言)。

SGML的前身GML由IBM在1960年发明,用于

描述设备无关的文本

8)XML是SGML的子语言,由SGML简化而来,起初的目的是为Web的结构文档提供服

务。

9)W3C组织在1998年2月10日发布XML1.0版,第二个版本发布于2000年10月9日。

10)XML是分层的树形结构的自解释的一种可扩展的标记语言。

<姓名>liucy

|

|

|

开始标记|结束标记

描述的数据

 

在标记语言中,标记是可以嵌套的

XML和HTML的关系

1)事实上,HTML和XML不能够进行比较的。

因为XML是一种元语言,而HTML是一

种定义好的标记语言。

XML是描述数据的语言,HTML是描是数据外观的语言。

2)HTML有一套确定的标记。

在W3C标准规范中定义了HTML标记的含义并由部分浏览

器实现了。

3)HTML标记非常适合描述人类易读的可视化文本。

4)HTML定义了许多表现指令用以优化在浏览器中的显示。

5)在HTML标记中,数据固有的结构丢失了。

6)HTML没有维持数据类型信息的完整性、约束、或实体间的其它关系,而XML提供了

这些特征。

xmlverson="1.0"encoding="GBK"?

>--声明这是一个xml文件,默认编码方式UTF-8

--跟标记,最外层只能有一个跟标记,即只能有一个树根

Liucy

30

Huxz

 

20

对XML文件的要求,格式良好(符合XML的语法要求),有效的XML;

XML的用途,数据传输的中间件,做为通用文档格式

1,数据交换

2,web服务

3,内容管理

4,web集成

5,充当配置文件

格式良好的XML文件的规范

XML文档是一种严格规范的语言,必须按照规范来写。

XML文档的框架结构

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

1)序言

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

XML声明

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

>

如:

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

>

文档类型声明:

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

如:

DOCTYPEstudinfoSYSTEM"studinfo.dtd">

2)元素

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

非空元素<起始标签>内容<结束标签>

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

字符数据

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

 

3)杂项

字符数据段

[CDATA[字符数据]]>

引用

ENTITY引用名".......">

处理指令XML为其它应用程序准备的接口。

处理指令?

>

注释

--注释内容-->

空白符指空格、回车等

 

XML文件事例

xmlverson="1.0"?

>

--这一句一定要求写在文件的第一行-->

--只能有一个根元素即那一对根标签-->

--根标签-->

--根元素的内容-->

--子元素-->

...

 

XML文件的写法

xml文档是有标签和标签中的内容组成的,标签和标签中的内容合成为元素

标签名可以由字母、数字、"_"、".",只可以以字母,下划线开头

非空元素

(起始标签)

aaa(内容)

(结束标签)

空元素

格式良好的XML文档的规范

1)文档声明位于文件的开头

xmlverson="1.0"?

>

2)文档中只能定义一个唯一的根元素(根元素是在文档声明之后的最外层的元素)

3)标签必须闭合,且不能交叉,有元素的起始标签,就必须有其结束标签(空元素除外)

4)层层嵌套,每一对标签总是出于另一对标签的内或和其处于同一层,不能交叉(根元素

chuw)

5)大小写敏感,起始标签和结束标签的名字要一致

6)属性值必须用引号引起来

7)注意特殊字符,使用时需要使用转义字符。

注意:

1.第一行一定要写

xmlverson="1.0"?

>

2.xml文件是由元素和元素的内容以及属性组成的,一个xml文件中只能有一个根元素,标

签和标签的内容加在一起叫作一个元素。

xml是大小写敏感的,只能以字母或下划线开头。

字符转义

<代表"<",

>代表">",

"代表双引号,

&代表"&",

'代表单引号

字符数据段,不解析

[CDATA[........]]>

最内层[]中的部分不必使用转义,其中内容会直接输出。

练习:

 

写一个xml文件,内容是自己的简历

要求:

必须要写明年龄,英语水平

&2.DTD(结构定义)

DTD文档是用于规定XML文档的结构。

只有结构符合所引用的DTD文件的XML文件才

能称之为有效的XML文件。

DTD(文档类型定义)

!

DOCTYPE定义DTD文件名

!

ELEMENT定义元素中可用的数据类型

#PCDATA可解析字符串。

1)DTD的调用

方式一:

调用内部文档类型定义。

xmlversion="1.0"standalone="yes"?

>

DOCTYPEstudinfo[

ELEMENTstudinfo(#PCDATA)>]>

注意点:

(1)studinfo与(#PCDATA)有空格

(2)文档类型名与根元素名必须一致

方式二:

调用外部文档类型定义,需要写一个DTD文档

xmlversion="1.0"standalone="no"?

>

DOCTYPEstudinfoSYSTEM"studinfo1.dtd">

注意点:

(1)standalone="no"

(2)注意dtd文件的路径

2)DTD的结构

是否有DTD文件

如果文档是一个"有效的XML文档"(见上一章),那么文档一定要有相应DTD文件,并且严

格遵守DTD文件制定的规范。

DTD文件的声明语句紧跟在XML声明语句后面,格式如下:

DOCTYPEtype-of-docSYSTEM/PUBLIC"dtd-name">

其中:

"!

DOCTYPE"是指你要定义一个DOCTYPE;

"type-of-doc"是文档类型的名称,由你自己定义,通常于DTD文件名相同;

"SYSTEM/PUBLIC"这两个参数只用其一。

SYSTEM是指文档使用的私有DTD文件的网址,

而PUBLIC则指文档调用一个公用的DTD文件的网址。

PUBLIC后面跟正式公用标识符和dtd的URL

 

"dtd-name"就是DTD文件的网址和名称。

所有DTD文件的后缀名为".dtd"。

我们还是用上面的例子,应该写成这样:

xmlversion="1.0"standalone="no"encode="UTF-8"?

>

DOCTYPEfilelistSYSTEM"filelist.dtd">

dtd文件中

定义语法:

ELEMENTRoot(#PCDATA)>根标记,只能是文本,并且不能有子标记

ELEMENTRoot(A)>Root标记下有一个A的子标记,不能有文本内容

ELEMENTRoot(A+)>Root标记下有一个或多个A的子标记,没有这个子标记不行,不

能有文本内容

ELEMENTRoot(A*)>Root标记下有0~n个A的子标记,不能有文本内容

ELEMENTRoot(A?

)>Root标记下有一个或零个A的子标记,不能有文本内容

ELEMENTRoot(A,B)>Root标记下有一个A的子标记和一个B字标记,要先有A,后

有B

ELEMENTRoot(A|B)>Root标记下有一个A的子标记或者一个B字标记

ELEMENTRoot>Root标记必须是空的,换行也不行

定义属性的约束

ATTLISTelementName

attributeNameattributeTypeattributeDefault>

 

ATTLISTA

p1CDATA

p2{a|b|c}

p3ID

>

属性名

CDATA属性是文本内容

{enumerated}写一个枚举,把枚举值列出来

NMTOKEN文本内容中的自负取值与标记命名规则一样,内容只能是字母,数字,下划线,

连字符

NMTOKENS复数情况,用空格分隔

ID是属性的类型,属性值必须唯一

IDREF表示属性的取值必须是文档范围中已经存在的ID属性的值,必须引用某个ID属性

的值

IDREFS复数情况,用空格分隔

属性默认形式

#REQUIRED该属性必须有,但是没有默认值

#IMPLIED属性可有可没有,也没有默认值

attribute-value用“”引起来

#FIXED用#FIXED“”形式,并且是固定值,属性的值必须是引号中的内容

 

实体声明

实体:

存储了任意符合规则的xml文档单元片断。

1、内部通用实体

定义格式

ENTITY实体名“实体内容”>

引用格式&实体名;

2、外部通用实体

定义格式

ENTITY实体名SYSTEM“外部实体的URI”>

引用格式&实体名;

事例:

xmlversion="1.0"standalone="no"?

>

DOCTYPEstudinfo[

ELEMENTstudinfo(name,age,address,school)>

ELEMENTname(#PCDATA)>

ELEMENTage(#PCDATA)>

ELEMENTaddress(#PCDATA)>

ELEMENTschool(#PCDATA)>

ENTITYschoolinfoSYSTEM"schoolinfo.txt">

]>

zhangshan

20

beijinghaidian

&schoolinfo;

 

XML第二天

 

一、NameSpace(命名空间)

 

2007年5月28日

namespace是为了解决XML文档中的命名冲突问题的。

DTD不支持命名空间,解析器无法测试命名空间。

1、作用:

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

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

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

示例:

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

>

 

t1

man

s1

--这个name和teacher根元素中的name发生命名冲突-->

girl

--这个sex和teacher根元素中的sex发生命名冲突-->

2、名域的声明

(1)直接定义

xmlns:

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

类比:

名字与身份证

名域的使用,名域前缀:

需要限定的元素名

示例:

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

>

teacherxmlns:

teacher="

xmlns:

student="

name>zhangshan

name>

sex>man

sex>

student>

name>stu1

name>

sex>girl

sex>

student>

 

teacher>

(2)缺省定义

xmlns=名域的URI

--在文档的默认名称空间中

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

>

xmlns:

student="

zhangshan

man

name>stu1

name>

sex>girl

sex>

3、名域的使用

(1)用名域限定元素

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

>

teacherxmlns:

teacher="

xmlns:

student="

 

name>zhangshan

name>

sex>man

sex>

student>

name>stu1

name>

sex>girl

sex>

student>

teacher>

(2)用名域限定属性

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

>

teacherxmlns:

teacher="

xmlns:

student="

name>zhangshan

name>

sex>man

sex>

addressteacher:

city="beijing">caoyang,no1

address>

student>

name>stu1

name>

sex>girl

sex>

addressstudent:

city="tianjin">haidian,no2

address>

student>

teacher>

4、名域的作用范围

名域能够把声明它的元素和该元素的所有子元素关联起来,除非它们被其他的名域声明所覆

盖。

局部优先

两个标志是否属于同一个命名空间是由URI决定的,跟前缀没有关系

若定义了一个无前缀的命名空间,那么那些无前缀的标签就属于这个命名空间了

 

二、XML文档的解析

DOM(文档对象模型)DocumentObjectModle

SAX(SampleAPIforXML)

都是w3c定义的标准

默认使用Apache提供的Xerces实现

采用树状分析,进行建模

 

1、Dom

为XML文档的已解析版本定义了一组接口。

解析器读入整个文档,然后构建一个驻留内

存的树结构,然后代码就可以使用DOM接口来操作这个树结构。

优点:

整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;

缺点:

将整个文档调入内存(包括无用的节点),浪费时间和空间;

使用场合:

一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)

 

DOM解析是将整个的XML文档元素结构读入内存,由根元素向下形成子元素分级树状关

系。

DOM的解析

 

DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();

方法模式

DocumentBuilderbuilder=factory.newDocumentBuilder();

Documentdocument=builder.parse(name);

---运用的工厂

以上三行代码,使用来生成Document对象的,Document对象就代表了读入内存后结构化

的XML文档。

使用Document对象的getDocumentElement()方法获得子节点,可以通过不断的迭代便利所

有节点,这些节点就代表了元素,从根元素开始一直到最内层的子元素。

getElementsByTagName(Stringtagname)这个方法可以通过元素的名来或得该元素内层元

素,

也就是或得了这个节点的所有子节点(NodeList)NodeList的方法getLength()(列表中的节

点数),

通过循环使用Nodeitem(intindex)(返回集合中的第index个项)方法,来获得每个子节

点。

String.trim();去处空格,制表符,换行标记

DOM解析的其他方法请参阅JAVAAPI文档。

(org.w3c.dom

 

2、SAX

javax.xml.parsers)

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解析器。

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

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

要实现SAX解析XML文档,有两种方法,

XMLReader和XMLReaderFactory

XMLReaderread=XMLReaderFactory.createXMLReader();

生成XMLReader对象,使用XMLReader对象的方法parse(Filef,ContentHandlerhandler),

ContentHandler是一个定义好事件处理方法的接口,

DTDHandler,EntityResolver,ErrorHandler这三个接口和ContentHandler接口相同,

但是其中定义的是其他事件处理方法,一般只是实现ContentHandler接口。

使用SAX解析XML文档,需要先有SAXParserFactory对象,他的对象是通过自身的静态

方法newInstance(),

然后再通过SAXParserFactory对象来创建SAXParser对象,使用SAXParser对象的

parse(Filef,DefaultHandlerhandler),DefaultHandler是用来处理解析时发出的事件的类,就可

以进行解析。

DefaultHandler实现了ContentHandler,DTDHandler,EntityResolver,ErrorHandler,四个

接口,但是只给出了空实现,便于使用者覆盖相应的方法。

 

SAX解析的其他方法请参阅

org.xml.sax.helpers)

 

JAVAAPI文档。

(javax.xml.p

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

当前位置:首页 > 高等教育 > 管理学

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

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