资源目录
压缩包内文档预览:(预览前20页/共34页)
编号:516510
类型:共享资源
大小:176.04KB
格式:RAR
上传时间:2015-11-12
上传人:QQ28****1120
认证信息
个人认证
孙**(实名认证)
辽宁
IP属地:辽宁
6
积分
- 关 键 词:
-
机械毕业设计
- 资源描述:
-
tx092XML 解析器分析研究,机械毕业设计
- 内容简介:
-
江苏大学 1 毕 业 论 文 XML 解析器 学 院:计算机技术与通信工程学院 班 级:通信 001 班 姓 名:赵 娟 学 号: 004062103 指导老师:肖铁军 刘芳 2004年 6 月 12日 nts江苏大学 2 摘 要 XML是当前最热门的网络技术之一,被称为 “ 第二代 Web语言 ” 、 “ 下一代网络应用的基石 ” 。 它 是一种置标语言,通过在数据中加入附加信息的方式来描述结构化数据。 随着XML越来越广泛地被采用,高效解析 XML文档也变得越来越重要,尤其是对于那些要处理大量数据的应用程序。不正确的解析会导致过度的内存消耗和过长的处理时间,从而有损于应用程序的可伸缩性,因此,选择正确的 XML解析方法至关重要。 本论文首先介绍了开发 XML解析器的意义及相关的背景知识,然后阐述了 XML语言的文档结构及基本语法,接着指出解析器的不同分类和用途,重点说明了 DOM和 SAX这两种解析技术的基本解析原理及相互之间的比较,最后决定设计一个小型的非验证 XML解析器。主要工作是在基于 SAX 解析技术下实现解析器的核心处理器 ContentHandler程序(使用 C+语言)。 关键字 : 可扩展符号化语 言 ,解析器, 用于 XML的简单 API, 文档对象模型 nts江苏大学 3 Abstract XML( eXtensible Markup Language) is one of the most popular network technologies at present, known as the second generation of Web language , foundation of network applications of future generation . It is a metal markup language which describes the structurization data by joining additional information in the data. The number of XML applications is growing all the time. Given the increasing importance of processing XML documents higher efficiently ,especially for the applications to dealing with a large amount of data. Incorrect parser will lead to the fact that the excessive memory will be consumed and pass for long treatment time, thus it impair application program can elasticity,so,choosing correct XML parser is very important . firstly, This paper introduces the way of developing XML parser and relevant background, then explains XML file structure and basic grammar of language, discusses different classification and usage of parser ,then paticularly compares the performance and functionality of the two most popular parser technology: DOM and SAX. finally ,this paper discribes my own designing of a small-scale Non-validating XML parser in detail,which mainly realizes key processor ContentHandler procedure of parser on the basis of SAX technology (use C + language). Keywords: eXtensible Markup Language( XML) ,parser, Simple API for XML(SAX), Document Object Model( DOM) nts江苏大学 4 目 录 摘 要 . 2 第一章 引 言 . 6 1.1 开发 XML解析器的意义 . 6 1.2 XML解析器面临的现状 . 7 1.3 研究的内容和目标 . 7 1.4 小 结 . 8 第二章 XML语法 . 9 2.1 XML的基本结构 . 9 2.1.1 处理指令 . 10 2.1.2 注释 . 10 2.1.3 根元素和子元素 . 10 2.1.4 属性 . 10 2.2 XML的“良规性”和“有效性” . 11 2.2.1 DTD . 12 2.2.2 Schema . 12 2.3 XML的名称空间 . 12 2.4 小 结 . 13 第三章 XML 解析器 . 14 3.1 XML解析器的用途 . 14 3.2 XML解析器的种类 . 14 3.2.1 验证或非验证的解析器 . 14 3.2.2 支持不同解析接口的解析器 . 15 3.2.3 特定语言编写的解析器 . 16 3.3 如何使用一个 XML解析器? . 16 3.4 DOM和 SAX . 16 3.4.1 DOM . 16 3.4.2 SAX . 18 3.4.3 DOM与 SAX的比较 . 20 3.5 小 结 . 21 第四章 XML解析器的设计及实现 . 22 4.1 系统设计 . 22 nts江苏大学 5 4.1.1主要任务 . 22 4.1.2 系统结构框图 . 22 4.2 解析过程 . 23 4.3 处理程序的实现 . 26 4.3.1 处理程序用到的接口 . 26 1. ContentHandler . 27 2. ErrorHandler . 28 3. DefaultHandler . 28 4. SAX2XMLReader . 29 4.3.2 SAX2CountHandlers(处理程序) . 30 4.3 小 结 . 31 结 束 语 . 32 致 谢 . 33 参 考 文 献 . 34 nts江苏大学 6 第一章 引 言 在信息处理技术的发展历史中, XML( eXtensible Markup Language,可扩展符号化语言 ) 是有关文档语法中最重要的发展之一。近年来, XML已经相当普及,它是一种可移植的、与平台无关的且直接可读的数据格式。许多软件厂商均已宣称 “ 支持 XML” ,这通常是指他们的软件产品将生成或用到 XML 格式的数据。 XML 同样也被看作是企业间交流 数据的通用格式。 XML已经广泛应用于各个领域,如:法律、航空、金融、多媒体、电信、软件设计、新闻等等。 XML已经成为几乎跨越所有应用的新文档格式的精选语法,可用于 Linux、 Windows、Macintosh以及其他计算机平台上。我们可以利用计算机通过交换 XML文档进行股票交易;在家 PC 机上玩游戏的孩子们用 XML保存自己的文档;体育爱好者利用 XML在移动电话上实时接收比赛信息。 XML 是有史以来最健壮、最可靠、最灵活的文档语法 。 从 XML文件中获得信息最好的办法是利用 XML解析器。解析器,简单的讲,就 是一个软件,它可以使 XML文件中的数据易于使用 。 1.1 开发 XML解析器的意义 因为 互联网的迅猛发展和普及,人们可以通过计算机与互联网联接,从世界各地实时的接收和发送大量、最新的信息,但在信息交换的过程中存在着一个突出的问题,就是多种多样的数据格式,给信息的有效使用带来了障碍。所以在信息时代 ,如何以最便捷、最可靠、最有效的方式获取所需的信息是一个很大的困扰。人们期待着能够找到一种可以描述任何逻辑关系的数据格式来统一电子数据的存储,从而不再因为数据格式的不统一而苦恼和困惑。目前,能够担当此任的就是 XML( eXtensible Markup Language,可扩展符号化语言)。 而处理 XML数据时,一定要使用 XML Processor(也就是 XML Parser),把 XML数据结构的检查等交给 XML Parser 去做 。 XML parser即 XML 解析器, 因为 XML文档有比 HTML更加严格的语法要求,所以使用和编写一个 XML 解析器比编写一个 HTML的解析器要容易。同时因为XML文档不仅标记文档的显示属性,更重要的是它标记了文档的结构和包含信息的特征,所以我们可以方便地通过 XML 解析器来获取特定节点的信息并加 以显示或修改。解析器的真正作用是一个 XML的读取和处理器,并不是一个解释器。 目前解析器种类繁多,性能各不相同,而且所使用的软件开发环境和操作系统也各不相同。随着 XML技术的广泛使用,如何开发出一个高效而且功能完备的解析器有着重要的意义。 nts江苏大学 7 1.2 XML解析器面临的现状 随着 XML文档的不断完善,要求的不断增加,如何开发出一个完整而又快速解析的 XML解析器成为对开发人员的挑战。目前存在的解析器针对不同的 XML文档有不同的优缺点。现在最流行的解析技术有 DOM 和 SAX。 DOM是 Document Object Model的缩写。 XML 将数据组织为一颗树,所以 DOM就是对这颗树的一个对象描 述 。通俗的说,就是通过解析 XML 文档,为 XML文档在逻辑上建立一个树模型,树的节点是一个个对象。我们通过存取这些对象就能够存取 XML文档的内容。 SAX是 Simple API for XML 的缩写,它并不是由 W3C官方所提出的标准,可以说是 民间 的事实标准。实际上,它是一种社区性质的讨论产物。虽然如此,在 XML 中对 SAX 的应用丝毫不比 DOM少,几乎所有的 XML解析器都会支持它。与 DOM比较而言, SAX 是一种轻量型的方法。 我们知道,在处理 DOM的时候,我们需要读入整个的 XML文档,然后在内存中创建 DOM 树,生成 DOM树上的每个 Node对象。当文档比较小的时候,这不会造成什么问题,但是一旦文档大起来,处理 DOM就会变得相当费时费力。特别是其对于内存的需求,也将是成倍的增长,以至于在某些应用中使用 DOM 是一件很不划算的事(比如在 applet 中)。这时候,一个较好的替代解决方法就是 SAX。 SAX在概念上与 DOM完全不同。首先,不同于 DOM的文档驱动,它是事件驱动的,也就是说,它并不需要读入整个文档,而文档的读入过程也就是 SAX的解析过程。所谓事件驱动,是指一种基于回调( callback)机制的程序运行方法。在 XMLReader接受 XML文档,在读入XML文档的过程中就进行解析,也就是说读入文档的过程和解析的过程是同时进行的,这和DOM区别很大。解析开始之前,需要向 XMLReader 注册一个 ContentHandler,也就是相当于一个事件监听器,在 ContentHandler 中定义了很多方法,比如 startDocument(),它定制了当在解析过程中,遇到文档开始时应该处理的事情。当 XMLReader读到合适的内容,就会抛出相 应的事件,并把这个事件的处理权代理给 ContentHandler,调用其相应的方法进行响应。 论文的第 3 章详细的介绍了这两种解析技术并加以比较,除了 DOM 和 SAX,还有一种新出来的 xpp技术,它的优缺点在第 3章中也有提到。 1.3 研究的内容和目标 我做的主要工作是设计一个小型的非验证 XML 解析器,我的设计思路是,使这个 XML解析器在基于 SAX 的方式实现 ContentHandler 接口,并运行一个测试程序 SAX2Count。当解析器读入一个 XML文档,就可以统计出属性个数、元素个数、字符个数、可忽略 的空格数。nts江苏大学 8 ContentHandler 是一个特殊的接口,通知处理程序发生了基本的分析事件,如元素的开始和结束。 设计的基本步骤如下所示: 创建一个 ContentHandler接口 实现 ContentHandler 接口 注册 ContentHandler SAX2Count类 读入一个 XML文档 测试程序 结果输出 其中还要编写几个用到的类和接口: errorhandler 接口 DefaultHandler 类 saxexception 类 saxparseexception 类 SAX2xmlreader 类 xmlreaderfactory 类 除了设计的部分,本论文对 XML文档的基本结构和语法,解析器的分类和用途也作了一些探讨。 1.4 小 结 XML语言系统建立的目的就是使它能够表示文档的内容,而且可以表示文档的结构,这样在能够被人类理解的同时,也能够被机器所理解。为了能够理解 XML格式的数据,需要一个专门的 XML解析器对 XML 数据进行解析,以获取数据。本章介绍了开发 XML解析器的意义以及目前 XML解析器的现状, SAX和 DOM是目前应用最广泛的解析模型, DOM 是基于文档驱动的模式,而 SAX 是基于事件 驱动的模式。 XML 解析器主要是针对 XML 文档的读取和处理,所以在下一章将讨论什么是 XML 及 XML 的基本结构和语法。 nts江苏大学 9 第二章 XML 语法 XML 是一种可用来描述结构化数据的元语言。 XML 和 HTML 同是 SGML(Standard Generalized Markup Language,标准通用标记语言 )的子集。 SGML是由国际标准化组织( ISO)制定的文档格式规范,主要用于文档的规范化表示和存储。 SGML的应用已有几十年的时间,主要局限于大公司内,为获得推广。其主要原因是 SGML 规范十分庞杂,相 应的解析处理软件造价高昂,只有少数财力雄厚的公司可以承受。 HTML是 SGML的一个子集。 HTML的应用主要局限于 Web 上。但是已经逐渐向其他方向扩展。由于 HTML 所具有的独特的超连接特性、跨平台特性、丰富的表现形式、以及大量的、跨平台的、成熟的著作工具和阅读工具, HTML已经逐渐成为一种信息存储的工具。例如, Windows 平台上的帮助文件早期多采用 WinHelp格式,现在功能丰富、操作简单的 HTML 帮助文件越来越流行。另外有一种趋势是采用基于Web的编程方法作为 Internet 编程的应用框架。 XML将 HTML 这种能力向前推进了一大步。 XML 既可用来作为一种精确的文档描述语言,同时作为一种元语言,又可用来定义其他语言。 XML具有许多 HTML所不具备的优点: . XML的可扩展性好。 XML的标签可以完全由用户自行定义,可以为不同的应用制定相应的 XML文法,进而可以产生各种语言来适应不同的需求。 . XML内容与形式分离,非常便于检索。 . XML的语法非常严格,从而有利于编写简单高效的处理工具。 XML适应了在网络时代准确、快捷传输信息的需要。其研究正逐渐成为热点 XML规范已经在年成为 W3C标准,与之相关的规范和 协议也在不断的发展中。 2.1 XML的基本结构 XML文档的基本结构由序言部分和一个根元素组成。 首先介绍 XML文档内容的基本单元 元素,它的语法格式如下: 标签文本内容 /标签 元素是由起始标签、元素内容和结束标签组成。用户把要描述的数据对象放在起始标签和结束标签之间。例如 : 赵娟 无论文本内容有多长或者多么复杂, XML元素中还可以再嵌套别的元素,这样使相关信息构成等级结构。下面的例子中,在 的元素中包括了所有职员的信息,每位职员都由 元素来描述,而 元素中又嵌套了 和 元素。 nts江苏大学 10 例 1: Lars Peterson 25000 Charlotte M. Cooper 34500 除了元素, XML文档中能出现的有效对象是:处理指令、注释、根元素、子元素和属性。 2.1.1 处理指令 处理指令给 XML 解析器提供信息,使其能够正确解释文档内容,它的起始标识是 “”。常见的 XML 声明就是一个处理指令: 处理指令还可以有其他的用途,比如定义文档的编码方式是 GB 码还是 Unicode 编码方式,或是把一个样式单文件应用到 XML 文档上用以显 示。 2.1.2 注释 注释是 XML 文件中用作解释的字符数据, XML 处理器不对它们进行任何处理。注释是用 “ ”引起来的,可以出现在 XML 元素间的任何地方,但是不可以嵌套: 2.1.3 根元素和子元素 如果一个元素从文件头的序言部分之后开始一直到文件尾,包含了文件中所有的数据信息,我们称之为根元素。 XML元素是可以嵌套的,那么被嵌套在内的元素称为子元素。在前面的例子中 employee 就是 employees 的子元素。 2.1.4 属性 属性给元素提供进一步的说明信息,它必须出现在起始标签中。属性以名称 /取值对出现,属性名不能重复,名称与取值之间用等号 “=”分隔,并用引号把取值引起来。例如: 25000 nts江苏大学 11 上例中的属性说明了薪水的货币单位是美元。 2.2 XML的“良规性”和“有效性” 序言包括了 XML声明和 DTD(或者是 XML Schema), DTD( Document Type Define,文档定义类型)和 XML Schema 都是 用来描述 XML 文档结构的,也就是描述元素和属性是如何联系在一起的。 假如 ,在 刚才的示例 前面加上如下的序言部分,就构成了一个完整的 XML 文档: 一个 XML文档中有且仅有一个根元素,其他所有的元素都是它的子元素,在例 1中,就是根元素。 一个 XML文档首先应当是 “ 格式良好的 ” ( Well-Formed), “ 格式良好的 ”XML 文档除了要满足根元 素唯一的特性之外,还包括: 起始标签和结束标签应当匹配:结束标签是必不可少的; 大小写应一致: XML 对字母的大小写是敏感的, 和 是完全不同的两个标签,所以结束标签在匹配时一定要注意大小写一致; 元素应当正确嵌套:子元素应当完全包括在父辈元素中,下面的例子就是嵌套错误: 正确的嵌套方式如下: 属性必须包括在引号中; 元素中的属性是不允许重复的。 XML文档的 “ 有效性 ” 是指一个 XML文档应当遵守 DTD文件或是 Schema的规定 。 有效的 ”XML 文档肯定是 “ 格式良好的 ”,它是比格式良好的文档更强的约束。其中有效的 XML文档应满足: 1)有一个 DTD定义; 2)元素嵌套形式与 DTD相合; nts江苏大学 12 3)属性只能取 DTD中的定义过的名字; 4)用于引用的 ID 值必须是全文档唯一的; 5)用于引用别的实体的 IDREF必须有对应的 ID 存在。 但 DTD本身并不是一个格式良好的 XML文档。 为了使大家理解“有 效性”,我在这里简单介绍一下 DTD和 Schema。 2.2.1 DTD DTD是对文档结构的一个清晰描述,定义了特定文档中出现的文档类型、属性和实体,给出了文档的整体结构和文档的语法。 DTD的作用是: 1) 使得 XML文档保持一致。 2) 可以共享。 3) 提供了对 XML 语法的形式化和完整的定义。 4) XML文档有单个 DTD来限制。 2.2.2 Schema XML Schema也规定了一套特定文档的结构,这是与 DTD的相同之处。与 DTD相比,最大的不同在于它本身也是 XML文档。此外还有以下不同 1)使用的是 XML 语法 。 2)可以用 XML解析器来解析。 3)允许使用全局性元素(在整个 XML文档中用相同的方式使用元素)和局部元素(特定的上下文中元素有不同的含义)。 4)提供丰富的数据类型(整型、布尔型、日期类型);且元素的数据类型可以规定甚至是自定义数据类型。 2.3 XML的名称空间 XML文档中很可能会定义许多名字相同而意义不同的元素或属性,尤其在把不同的 XML文档合而为一时,更容易产生冲突。名称空间就是为了解决这个问题而提出的。它用 URI( Uniform Resource Indicator,统一资源指示器)加 以区别,是在 XML文件的元素和属性中出现的所有名称的集合。如下例: Lars Peterson Reimburse expenses nts江苏大学 13 199.76 有了名称空间,用户就可 以保证在文件中使用的名称是唯一的。对元素的属性 xmlns进行定义就表示对该元素指定了一个名称空间。 namespace_name 必须是一个有效的 URI。 如果省略 local_prefix(本地前缀),这时就构成了缺省名称空间: 1234 500.00 12-03-2000 如果对一个元素定义了缺省名称空间,那么该元素及其子元素,包括它们的属性都会自动地成为该名称空间的一部分,不用再在每一个元素和属性前面一一标明了。 2.4 小 结 本章主要介绍了 XML 文档的一些基本语法 , XML 文档的基本结构是由序言和一个根元素组成。序言包括 XML 声明和可选的文档类型声明( DTD 或 Schema) ,一个 XML 文档是否遵守 DTD或 Schema 的规定即 XML 文档的“有效性”,“有效性”不同于“良规性”,“良规性”除了满足根元素唯一 外还有很多要求。 XML文档中很可能会定义许多名字相同而意义不同的元素或属性, 名称空间就是为了解决这个问题而提出的。下一章将介绍 XML解析器的种类,用途和具体的解析模型 DOM 和 SAX.nts江苏大学 14 第三章 XML 解析器 3.1 XML解析器的用途 在任何应用程序的内部,无论是字处理器,数据库,或者图形处理,这些软件都要读取数据,之后把数据处理成为一定的格式,以便应用程序可以理解。 XML解析器就是 能够读取XML文档并能处理它的软件 。所以 XML解析器的主要用途就是,读入一个 XML 文档, 从文档中提取实际的数据,然后创建一 系列的事件或者是新的数据结构。 同时, 解析器 也 能够检查文档是否是 well-formed,也就是说是否严格的遵守了 XML 规范,而这是处理 XML 文档之前就必须进行的工作。另外,解析器还应该能够判断一个文档是否遵守 DTD/Schema 标准,如果该文档有一个 DTD/Schema 的话。 XML不象 HTML,它本身是不关心应用程序如何展示它的内容的,而关于内容的展示形式可以由 CSS( Cascading Style Sheet,层叠样式表) 或者 XSL( Extensible Stylesheet Language,可 扩展样式表语言) 来指定。 样式表是为 XML 文档提供格式信息的一种机制。 所以一个良好的 XML解析器还需要对 CSS和 XSL进行分析处理 3.2 XML解析器的种类 根据不同的划分标准,解析器有不同的分类法: 根据解析器是否支持完整性检查和文档表现形式转化可分为 验证或非验证解析器 根据解析器进行文档解析的接口不同可分为支持 DOM的解析器,支持 SAX的解析器,支持 XPP的解析器 根据编写解析器的语言不同可分为 特定语言编写的解析器 (Java, C+, Perl 等 ) 3.2.1 验证或非验证的解析器 前面 也曾提到过 文档如果使用一个 DTD 并符合 DTD 中的规则将被称为有效文档(valid document)。符合基本标记规则的 XML 文档被称为格式正确文档 (well-formed document)。 XML 规范要求所有的解析器当其发现一个文档不是格式正确时要报错。 验证 (Validation)则是另一个问题了。验证解析器 (Validating parser)在解析 XML 文档同时进行验证。非验证解析器 (Non-validating parser) 忽略所有的验证错误。换而言之,如果一个 XML 文档是格式正确的时,一个非验证解析器并不关注文档是否符合其对应 DTD 所指定的规则 (如果有的话 )。 nts江苏大学 15 那 为 什么要 使用非验证解析器 呢?就是为了 速度和效率。要一个 XML 解析器处理 DTD 并确保每个 XML 的元素符合在 DTD 中的规则需要相当大的开销。如果您确定一个 XML 文档是有效的 (可能来自一个数据源 ),那就没有必要再次验证它了。同样,有时 我们 所需要的只是从一个文档中找出 XML 的标记。一旦有了这些标记, 就 可以将数据从中提取出然后加以处理。 3.2.2 支持不同解析接口的解析器 DOM 文档对 象模型 (Document Object Model)是 World Wide Web Consortium(W3C) 的正式推荐。它定义了一个接口使得程序可以存取和更新 XML 文档的风格、结构和内容。支持 DOM 的 XML 解析器实现该接口。 用一个 DOM 解析器来解析一个 XML 文档时,将 会 获得一个包含文档中所有元素的树结构。 DOM 提供了不同的功能来检查文档的内容和结构。 SAX SAX API 是另一种处理 XML 文档内容的方法。一个既成事实的标准,它由 David Megginson 和 XML-Dev 邮件列表其它成员所开发。 使用 SAX 解析器来解析 XML 文档时,解析器在文档的不同处将产生事件。由 开发人员来决定对每个事件如何处理。 SAX 解析器会在以下情况下产生事件:在文档开始和结束时,在一个元素开始和结束时,或者它在一个元素中找到字符时,以及其它若干点。 XPP XML Pull Parser(XPP)是最近开发的,它演示了 XML 解析的不同方法。 XPP只能适当支持 XML文档的子集并且不提供验证的任何支持。将 XPP限制成 XML文档子集的局限性是它不支持文档中的实体、注释或处理 指示信息。 XPP创建仅包含元素、属性(包括“名称空间”)和内容文本的文档结构。这对于某些类型的的应用程序来说是一种非常严格的限制。但是通常它对性能的影响较小。 XPP中的拉回解析器支持通过将解析实际上推迟到访问文档的一个组件时才进行,然后按照构造那个组件的需要对文档进行解析。该技术想实现非常快速的文档显示和分类应用,尤其在需要转发或除去(而不是对文档进行完全解析和处理)文档时。该方法的使用是可选的,如果以非拉回型方式使用 XPP,它对整个文档进行解析并且同时构建完整的表示。 XPP使用依据文本文档构建文档表示 的集成语法解析器,并且除了通过文本方式外,它不提供从 DOM(或 SAX2) 转换或转换成 SAX2(或 DOM) 事件流的任何方式。 nts江苏大学 16 3.2.3 特定语言编写的解析器 Java IBM 的解析器 XML4J James Clark 的解析器 XP Sun 的 XML 解析器 DataChannel 的 XJParser C+ IBM 的 XML4C 解析器 James Clark 的 C+ 解析器, expat, Perl Perl解析器, ActivePerl Python John Aycock 的 Spark 解析器 3.3 如何使用一个 XML解析器? 通常而言,使用一个解析器需要如下步骤: 1. 创建一个解析器对象 2. 将您的 XML 文档传递给解析器 3. 处理结果 构建一个 XML 应用显然远远超出这些,但通常一个 XML 的应用将包含这些流程。 前面 3.2.2 曾提到,针对不同的解析技术存在着不同的解析器,目前成熟的解析技术主要有两种: DOM 和 SAX。另外, XPP 是一种新型技术,相比较于“推送”模式是一个巨大的进步,而且,基于“拖拉”模式的解析器可以由不同的框架处理器简单的操控。但是,XPP 技术主要是想实现允许快速的文档显示或分类应用,而不是对文档进行完全解析和处理,所以暂时不考虑这种技术。下面将对 DOM 和 SAX 这两种解析技术的基本解析原理及相互之间的比较进行一个详细的说明。 3.4 DOM和 SAX 3.4.1 DOM 文档对象模型( Document Object Model, DOM)。 它用于随机访问 XML 文档的各个部分 1 DOM的概念 nts江苏大学 17 DOM是一种与平台和语言无关的编程接口,它允许程序和脚本动态的访问和修改文档的内容结构和类型。它定义了一系列的对象和方法对 DOM树的节点进行各种随 机操作。 Document对象: DOM树的最顶层节点,是对整个文档进行操作的入口。 Element和 Attr对象:这些节点对象都是文档某部分的映射,节点的层次恰好反映了文档的结构。 Text对象:作为 Element和 Attr对象的子节点, Text对象表达了元素或属性的文本内容。 Text节点不再包含任何子节点。 集合索引: DOM提供了多种集合索引方式,可以对节点按指定方式进行遍历。 DOM采用以上介绍的一系列接口来描述 XML文档的内容和结构,即利用对象将文档模型化。这种对象模型实现的基本功能包括: 描述文档表 示和操作的接口; 接口的行为和属性; 接口之间的关系以及互操作。 DOM对结构化的 XML文档进行解析,文档中的元素、实体、属性等所有个体都可以用对象模型表示。整个文档的逻辑结构类似一棵树,生成的对象模型就是树的节点,每个对象同时包含了方法和属性。 DOM树中的所有节点都是从 Node对象继承而来的。 Node对象定义了一些最基本的属性和方法,利用这些方法可以实现对树的遍历,同时,根据属性还可以得知节点的名称、取值并判断其类型。 DOM提供了许多查找节点的方法。其中用于搜索的方法有: 根据标签名称搜索元素:利用 Document对象中的 getElementByTagName 方法在全文范围内查找元素; 使用 XSL模式搜索节点:所有类型的节点都带有 SelectNodes方法,调用这个方法可以利用 XSL的模式匹配策略查找节点; 使用集合索引搜索节点:索引参数都是从 0开始计数的,例如子节点 ChildNodes对象集。 利用 DOM,开发人员可以动态地创建 XML、遍历文档、增加(删除 /修改)文档内容。 DOM提供的 API与编程语言无关,所以对一些 DOM标准中没有明确定义的接口,不同解析器的实现方法有可能有所差别。 2 DOM解析模 型的树型结构 nts江苏大学 18 图 1 DOM 树 图 1所示为 DOM解析模型的树型结构。文档是所有 DOM树的根,这个根有至少一个子节点,即根元素,另一个节点是文档类型 (DocumentType),用于 DTD说明。根元素有子节点,其子节点还有自己的子节点。子节点可以是元素、文本、注释、处理指令及其他类似信息。 3 DOM解析的优缺点 DOM解析的优点:结构清晰,操作方便,容易修改和删除 DOM解析的缺点: 1.DOM构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。 2.DOM创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。 3.DOM解析器必须在程序取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。 3.4.2 SAX 用于 XML 的简单 API( Simple API for XML, SAX)。 它用于顺序访问。 1 SAX的概念 SAX在概念上与 DOM完全不同。首先,不同于 DOM的文档驱动,它是事件驱动的,也就是说,它并不需要读入整个文档,而文档的读入过程也就是 SAX的 解析过程。所谓事件驱动,是指一种基于回调( callback)机制的程序运行方法。 具体的运行如图 2所示: nts江苏大学 19 图 2 在 XMLReader接受 XML文档,在读入 XML文档的过程中就进行解析,也就是说读入文档的过程 和 解析的过程是同时进行的,这和 DOM区别很大。解析开始之前,需要向 XMLReader注册一个 ContentHandler,也就是相当于一个事件监听器,在 ContentHandler 中定义了很多方法,比如 startDocument(),它定制了当在解析过程中,遇到文档开始时应该处理的事情 。当 XMLReader读到合适的内容,就会抛出相应的事件,并把这个事件的处理权代理给ContentHandler,调用其相应的方法进行响应。 2 SAX解析模型 图 3 SAX以一系列事件的方式向应用程序报告文档 如图 3所 示 : SAX解析器如何通过一个 回调机制报告事件。解析器读取输入文档并在处理文档时将每个事件推给文档处理器( MyContentHandler)。 3 SAX解析的优缺点 SAX解析的优点: SAX 解析器 startElement”title” characters endElement”title” MyContentHandler Is title=true Print Title in to Is title=false 通读读读 推送事件 XML 文档 nts江苏大学 20 与 DOM相比, SAX解析器能提供更好的性能优势,它提供对 XML文档内容的有效低级访问。 SAX模型最大的优点是内存消耗小,因为整个文档无需一次加载到内存中,这使 SAX解析器可以解析大于系统内存的文档。另外,你无需像在 DOM中那样为所有节点创建对象。最后, SAX“ 推 ” 模型可用于广播环境,能够同时注册多个 ContentHandler,并行接收事件,而不是在 一个管道中一个接一个地进行处理。 SAX解析的缺点 SAX的缺点是你必须实现多个事件处理程序以便能够处理所有到来的事件,同时你还必须在应用程序代码中维护这个事件状态,因为 SAX 解析器不能交流元信息,如 DOM的父 /子支持,所以你必须跟踪解析器处在文档层次的哪个位置。如此一来,你的文档越复杂,你的应用逻辑就越复杂。虽然没有必要一次将整个文档加载到内存中,但 SAX解析器仍然需要解析整个文档,这点和 DOM一样。 3.4.3 DOM 与 SAX 的比较 SAX DOM 顺序读入文档并产生相应事件,可以处理任何大小的 XML文档。 在内存中创建文档树,不适合处理大型 XML文档。 只能对文档按顺序解析一遍,不支持对文档的随意访问。 可以随意访问文档树的任何部分,没有次数限制。 只能读取 XML文档内容,而不能修改 可以随意修改文档树,从而修改 XML文档。 开发上比较复杂,需要自己来实现事件处理器 易于理解,易于开发 对开发人员而言更灵活,可以用 SAX 创建自己的 XML对象模型。 已经在 DOM基础之上创建好了文档树。 表 1 通过表 1对 SAX和 DOM的分析,它们各有自己的不同应用领域: SAX适于处理下面的问题: 对大 型文档进行处理。 只需要文档的部分内容,或者只需要从文档中得到特定信息。 想创建自己的对象模型的时候。 DOM适于处理下面的问题: 需要对文档进行修改 nts江苏大学 21 需要随机对文档进行访问,例如 XSLT解析器。 3.5 小 结 本章开始介绍了 XML 解析器的用途,解析器 的真正作用是一个 XML 的读取和处理器,并不是一个解释器。 解析器根据不同的标准可以有不同的分类。本章还简单介绍了如何使用一个解析器,主要步骤是什么。最后重点阐述了 DOM 和 SAX 这两种解析模型,分别从概念、解析模型和优缺点进行说明,然后就各个方面对它们进行一 个比较, DOM 和 SAX 各有自己不同的应用领域。 下一章将详细介绍 XML 解析器的系统结构的设计与实现。nts江苏大学 22 第四章 XML 解析器的设计及实现 4.1 系统设计 4.1.1主要任务 XML解析器要完成的主要任务: 基于 sax的解析技术; 实现解析器的核心处理器 Contenthandler 程序; 设计一个简单的处理程序 SAX2Count,统计出字符个数与元素个数。 4.1.2 系统结构框图 设计的 XML解析器的系统结构如图 4所示: nts江苏大学 23 图 4 4.2 解 析过程 当 解析器 在解析一个文档的时候, SAX2XMLReader 读 入 该文档并产生一系列的事件,你可以选择一些事件进行处理
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。