资源目录
压缩包内文档预览:
编号:516510
类型:共享资源
大小:176.04KB
格式:RAR
上传时间:2015-11-12
上传人:QQ28****1120
认证信息
个人认证
孙**(实名认证)
辽宁
IP属地:辽宁
6
积分
- 关 键 词:
-
机械毕业设计
- 资源描述:
-
tx092XML 解析器分析研究,机械毕业设计
- 内容简介:
-
江苏大学 1 读 书 报 告 XML是当前最热门的网络技术之一,被称为 “ 第二代 Web语言 ” 、 “ 下一代网络应用的基石 ” 。 XML 的全名为 eXtensible Markup Language, 即 可扩展标记语言 。它 是一种置标语言,通过在数据中加入附加信息的方式来描述结构化数据。不过, XML并非象 HTML那样,只提供一组事先已经定义好的标记。准确地说,它是一种元置标语言,允许程序开发人员根据它所提供的规则,制定各种各样的置标语言。 XML语言系统建立的目的就是使它能够表示文档的内容,而且可以表示文档的结构,这样在能够被人类理解 的同时,也能够被机器所理解。 为了能够理解 XML 格式的数据,需要一个专门的 XML解析器对 XML数据进行解析,以获取数据。 什么是解析器? XML包含一组规则,任何人都可以根据这组规则创建标记语言。这些规则确保使用一个简洁的程序就能处理所有这些新语言,这种简洁的程序叫做 解析器( parser) 。现在比较流行的解析器有两种, 支持 DOM的解析器 和 支持 SAX 的解析器 。 DOM( Document Object Model,文档对象模型)。 DOM 是由 W3C 在 1998 年 10 月 1 日发布的标准,它最开始的目的是为了 建立一套标准来定义建立在微软和网景经验之上的文档对象模块,它实际上是定义了文档的逻辑结构以及对文件进行访问和操作的方法。 DOM将一个XML文档转换成你程序中的一个对象集合。然后你可以任意处理对象模型。所以,从本质上讲, DOM是 XML文档的一个结构化的视图。 DOM将一个 XML文档看成是一棵节点树,每一个节点代表一个可以和它交互的对象,这一机制也称为 随机访问 协议,因为你可以在任何时间访问数据的任何一部分,然后修改、删除或插入新数据。 虽然 DOM是操作和访问 XML文档的非常方便的方法,但是它是有代价的 ,它需要在实际进行处理前对整个 XML 文档进行分析,而把整个 XML文档转换而成的树放到内存中需要占据很大的空间,尤其是当 XML 文档很大的时候。 SAX( Simple API for XML, XML 简单应用程序接口)。首先要说明的是, SAX 的创建是独立于 XML团体的,它没有 DOM那么多的特征,因为在一开始设计 SAX的时候,它的目的就是仅仅提供为处理大型文档而进行优化的标准的解析器接口。这一 API是事件驱动的,又称顺序访问 协议。每当它看到一个新的 XML标记(或遇到一个错误,或想告诉你什么事时)就用一个 SAX解析器注册你的句柄,激活你的回调方法 。 nts江苏大学 2 基于事件解析的 SAX模型分析 SAX2 解析器读 XML 文档,然后产生基于特殊符号的事件。 SAX2解析器实际上并不为该文档在内存中创建一棵树结构,它序列的处理一个文档的内容并产生相关的事件。 比如,当你进行基于事件的编程的时候,你可以创建函数来响应用户定义的事件(比如OnClick 事件)。在利用 SAX 进行编程的时候,需要注意的是,是解析器而不是用户产生事件。 比如考虑下面一个简单的文档。 ?xml version=1.0? parts part TurboWidget /part /parts 当 SAX2在处理这个文档的时候,它产生如下的一系列的事件: StartDocument( ) StartElement( parts ) StartElement( part ) Characters( TurboWidget ) EndElement( part ) EndElement( parts ) EndDocument( ) 可以把 SAX2看成是一个有拉特点 ( PUSH)的解析器, SAX2产生事件,然后你可以自己去处理些事件。实际上,当 SAX2在解析一个文档的时候, SAXXMLReader读该文档并产生一系列的事件,你可以选择一些事件进行处理 。 创建一个应用 SAX 的应用程序框架 SAX2产生的事件包括如下的种类: 和 XML文档内容相关的事件 (ISAXContentHandler) 和 DTD相关的事件 (ISAXDTDHandler) 出现错误时发生的事件 (ISAXErrorHandler) nts江苏大学 3 为了处理这些事件,你需要实现一个 相关的处理类,该处理类需要包含一些方法来处理相关的事件。你必须对你想要处理的事件实现相关的处理。如果你不想处理某一个事件的话,只需要简单的忽略它就可以。在实际应用中,我们首先要继承这些接口,用 C+我们可以创建一个类,在这个类的方法中,我们可以告诉应用程序在接收到一个事件的时候如何进行处理。下面是建立一个基于 SAX的应用的基本步骤: 1 创建头文件当使用 SAX2 的时候,我们需要用到动态连接库 MSXML.DLL,为了使用MSXML中包含的 SAX2 接口,你必须在程序的头文件(一般在 stdafx.h中)中 包含下列的代码: #import raw_interfaces_only using namespace MSXML2; 2 建立具体的操作( handler)类, SAX2主要定义了三个基本的操作类,它们分别是ISAXContentHandler, ISAXDTDHandler和 ISAXErrorHandler。 ISAXContentHandler是用来处理 SAX2解析器对文档内容进行解析时所产生的消息的,ISAXXMLReader 通过方法 putContentHandler 来注册 这个实例。而 ISAXDTDHandler 是用来处理和 DTD相关的基本的消息的, ISAXXMLReader通过方法 putDTDHandler来注册这个实例。ISAXErrorHandler 提供了对在解析过程中遇到错误时产生的错误事件的处理,ISAXXMLReader通过方法 putErrorHandler来注册这个实例 因为这三个类都是用来对事件进行处理的,并且需要在接口 ISAXXMLReader 中进行注册。但是它们的基本使用方法类似,所以我们这里只详细描述对接口 ISAXContentHandler 的操 作。 ISAXContentHandler 接口接收关于文档的内容变化的事件,这是实现 SAX 应用所需要的最重要的接口,如果应用在遇到基本的解析事件的时候需要被通知的话, ISAXXMLReader通过方法 putContentHandler 来注册这个实例,然后 ISAXXMLReader就使用这个实例来报告基于文档的事件,比如元素的开始,元素的结束和相关的字符串数据等等。ISAXContentHandler 包括了很多的方法:比如 startDocument , endDocument ,startElement, endElement 等等。实际上它包含了好接个 startXXX 和 endXXX 对来建立不同的信息集合的抽象。比如 startDocument 方法在文档信息开始的时候被调用,而在startDocument以后被调用的方法就被认为是文档信息项( item)的子项。在文档信息内容结束的时候 endDocument就被调用,表示文档信息的结束。 实际上是 SAX2在解析文档的时候,当处于文档某一位置的时候,会激发相应的方法,比如当一个文档开始的时候,就会激发 startDocument 方法,在实际实现的时候,我们可以在我们继承 ISAXContentHandler 类的实现类中,重载该方法,实现我们自己想要的处理。我们可以把这些方法看成是ISAXContentHandler 接口提供给我们的。需要注意的是事件被处理的顺序和信息在文档中的位置是一致的。 同时需要注意的是,如果我们需要在我们的应用中对这些消息进行处理的话,我们就要nts江苏大学 4 继承处理这些消息的类,比如我们只需要对文档内容进行处理,而忽略对 DTD 和解析过程中错误 (Error)的处理,那么我们只需要创建一个新的类,该类继承 ISAXContentHandler 接口,因为 ISAXContentHandler 中定义了很多的事件处理方法,而事实上我们只需要对我们所关心事件的处理方法进行重载,对我们不关心的事件可以简单的忽略它。 比如我们只关心 startElement和 endElement事件,而且我们假设我们建立的类的名称为 CXMLContentDeal,我们的类就可以如下面所示: class CXMLContentDeal : public ISAXContentHandler public: CXMLContentDeal(); virtual CXMLContentDeal (); virtual HRESULT STDMETHODCALLTYPE startElement( /* in */ wchar_t _RPC_FAR *pwchNamespaceUri, /* in */ int cchNamespaceUri, /* in */ wchar_t _RPC_FAR *pwchLocalName, /* in */ int cchLocalName, /* in */ wchar_t _RPC_FAR *pwchRawName, /* in */ int cchRawName, /* in */ ISAXAttributes _RPC_FAR *pAttributes); virtual HRESULT STDMETHODCALLTYPE endElement( /* in */ wchar_t _RPC_FAR *pwchNamespaceUri, /* in */ int cchNamespaceUri, /* in */ wchar_t _RPC_FAR *pwchLocalName, /* in */ int cchLocalName, /* in */ wchar_t _RPC_FAR *pwchRawName, /* in */ int cchRawName); 然后我们可以重载方法 startElement和 endElement来进行 和应用相关的特殊的处理。 3 通过接口 ISAXXMLReader 创建一个解析器。 XMLReader是 SAX应用实现的主要的接口, XMLReader的作用是这样的。首先, XML的开发人员使用这个接口来注册他们对其他 SAX接口的实现(比如 ContentHandler,DTDHandler,ErrorHandler等等),另外, XMLREADER通过 setFeature 和 setProperty 两个方法来配置 SAX 解析器的行为,最后, XMLReader 封装了解析的功能。示例代码如下: ISAXXMLReader* pRdr = NULL; HRESULT hr = CoCreateInstance( _uuidof(SAXXMLReader), NULL, CLSCTX_ALL, _uuidof(ISAXXMLReader), (void *)&pRdr); nts江苏大学 5 4 创建相应的事件( handler)处理类,这里不妨假设我们只处理和文档内容相关的事件。示例代码如下: CXMLContentDeal * pMc = new CXMLContentDeal(); 注意这里 CXMLContentDeal是继承接口 ISAXContentHandler 的类。 5在解析器中注册事件处理类,示例代码如下: hr = pRdr-putContentHandler(pMc); 6开始进行文档的解析,示例代码如下 hr = pRdr-parseURL(URL); file:/这里的 URL是指一个具体 XML文档的位置
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

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