您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页基于VC平台的XML解析技术分析

基于VC平台的XML解析技术分析

来源:爱go旅游网
维普资讯 http://www.cqvip.com

第23卷第5期 2007年9月 齐齐哈尔大学学报 Journal of Qiqihar University Vo1.23,No.5 Sep.,2007 基于VC平台的XM L解析技术分析 文必龙’,关翔瑞 ,周凯 f1.大庆石油学院计算机与信息技术学院,黑龙江大庆163318;2.大庆油田有限责任公司采油--V,黑龙江大庆163414) 摘要:XML数据由嵌套的标记元素组成,标记包含了对文档存储形式和逻辑的描述XML的嵌套标记使得它更适 合描述Web上的半结构化的数据。XML不仅能够表示文档的内容,而且可以表示文档的结构。通常解析XML文 档有两种方法:一种是文档对象模型DOM(Document Object Mode1),另外一种是XML简单接口SAX ̄imple API for XML o本文对这两种方法进行了介绍,并在VC6环境下实现了对XML文档的解析。 关键词:XML解析;DOM;SAX;VC 中图分类号:11P311.52 文献标识码:A 文章编号:1007—984X(2007)05—0035-05 随着XML逐渐成为科学与业务应用中的数据表示以及互联网上数据传输的标准格式,有效地存储和查 询XML格式数据成为首要解决的技术环节。在实际应用中,应用程序不是直接对XML文档进行操作的, 而是首先由XML分析器对XML文档进行分析,然后应用程序通过XML分析器所提供的DOM接口或SAX 接口对分析结果进行操作,从而间接地实现了对XML文档的访问。本文以下面的XML文档为例进行解析: addressbook.xml的文档如下: <?xml version=”1.0’’encoding=’’GB2312’’?><person id=’’002’’> <addressbook><person id=”001”><name>李四</name> <email>ls ̄.net.cn</email> <name>张 ̄.</name><email>zhs@xm1.net.cn</email><]person> </person> </addressbook> 1 D0M解析技术及其实现 1.1 DOM方法简单描述 DOM(Document Object Mode1)是W3C制定的一种独立语言和平台的标准,它提供一个可以通用于各种 程序语言、操作系统和应用程序的接口,它定义了文档的逻辑结构以及存取和维护文档的方法。利用DOM 中的对象,可以对XML文档进行读取、搜索、修改、添加和删除等操作。DOM是对XML数据的描述体系, 它用树型结构的文档来保存XML数据,它包括了对XML的解析和处理XML数据的Apt31o基于DOM的XML 分析器将一个XML文档转换成一个对象模型的集合,应用程序正是通过对这个对象模型的操作,来实现对 XML文档数据的操作。通过DOM接I:1,应用程序可以在任何时候访问XML文档中的任何一部分数据,因 此,这种利用DOM接I:1的机制也被称作随机访问机制。总之,DOM是一个对象化的XML数据接口。—个 与语言无关、与平台无关的标准接I:1规范。它定义了XML文档的逻辑结构,给出了一种访问和处理XML 文档的方法。 DOM接I:1提供了一种通过分层对象模型来访问XML文档信息的方式,这些分层对象模型依据XML的 一文档结构形成了一棵节点树。无论XML文档中所描述的是什么类型的信息,即便是制表数据、项目列表或 个文档,利用DOM所生成的模型都是节点树的形式。也就是说,DOM强制使用树模型来访问XML文档 收稿13期:2007-06—22 作者简介:文必龙(1967-),男,湖北省仙桃人,教授,博士研究生。主要研究方向:软件工程与集成技术。 维普资讯 http://www.cqvip.com 齐齐哈尔大学学报 2007年 中的信息。由于XML本质上就是一种分层结构,所以这种描述方法是相当有效的。 DOM的优点是方便好用,整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种操作功 能,因此它被广泛应用。但是,它在使用上却常常会受到系统资源的限制,尤其是内存,因为它将整个文 档调人内存,包括无用的节点,操作浪费时间和空间,因此对于比较大的XML文档,建议不用这种方法。 图I DOM树彤结构 1.2 DOM解析方法及其实现过程 首先,需要声明XML DOM文档对象,并将所要解析的XML文档载人内存翻译为DOM树,主要代码 如下: MSXML2::IXMLDOMDocumentPtr pDoc; pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30)); pDoc->load(”addressbook.xml”); 在XML文档被文档对象翻译成树之后,可以使用DOM所提供的对象接口中的方法来浏览整个文档,抽 取信息,动态地创建XML文档,添加、修改、删除内容,或者将文档转换成自己所需要的内容。如下这行 代码将获得这棵DOM树的节点信息。 在XML文档中查找指定的结点: MSXML::IXMLDOMNodePtr pNodeName=pDoc->selectSingleNode(”addressbook/name“); 得到结点的内容: _bstrt name=pNodeName->Gettext0; _得到结点的属性: MSXML::IXMLDOMNamedNodeMapPtr pARrs=NULL; pNodeName->getauributes(&pAttrs); _MSXML::IXMLDOMNodePtr pRequestTypeAtt ̄-pAttrs->getQualiifedltem(” ’,…’); _bstrt strRequestType--pRequestTypeAttr->Gettext0; _strAurs=strRequestType.operator char 0; 设置结点的内容: HRESULT hr=-pNode->puttext(__bstr_t(m_str)); _设置结点的属性: IXMLDOMAttribute pa=NULL; bstr=SysAllocStting(L”id”); pXMLDOM->createAttribute(bstr,&pNode); var=VariantString(L”003”); pa一>put_value(vat); pRoot->setAttributeNode(pa,&pa1); 保存XML文件 pDoc->save(”addressbook.xml”); 维普资讯 http://www.cqvip.com 第5期 基于VC平台的XML解析技术分析 ・37・ 2 SAX解析技术及其实现 2.1 SAX方法简单描述 与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX 分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件 处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口p 。 SAX分析器在对XML文档进行分析时,触发了一系列的事件,由于事件触发本身是有时序性的,因 此,SAX提供的是一种顺序访问机制,对于已经分析过的部分,不能再倒回去重新处理。SAX之所以被叫 做”简单”应用程序接口,是因为SAX分析器只做了一些简单的工作,大部分工作还要由应用程序自己去 做。也就是说,SAX分析器在实现时,它只是顺序地检查XML文档中的字节流,判断当前字节是XML语 法中的哪一部分、是否符合XML语法,然后再触发相应的 事件,而事件处理函数本身则要由应用程序自己来实现。 SAX模型内存消耗小,因为整个文档无需一次加载到内 存中。这使SAX解析器可以解析大于系统内存的文档。同 DOM分析器相比,SAX分析器缺乏灵活性。然而,由于 SAX分析器实现简单,对内存要求比较低,因此实现效率 比较高,对于那些只需要访问XML文档中的数据而不对文 档进行更改的应用程序,以及要解析比较大的XML文档来 说,SAX分析器更为合适 。 2.2 SAX解析方法及其实现过程 图2 SAX架构 用户使用SAX技术解析XML文档可分为以下两步:实现事件处理器和建立应用程序。 1)实现事件处理器。在使用SAX解析XML文档之前,用户首先必须实现ISAXContentHandler、 ISAXErrorHandler等接口。在SAX中,其核心接口ContentHandler报告基本解析事件及文档事件,包括文档 开始事件、元素开始事件等等。处理特定的XML文件时,需要为其创建一个实现了ContentHandler的类来 处理特定的事件。ContentHandler接口中一些主要的方法有startDocument、endDocument、startElement、 endElement、Characters等。实现这些接口的代码如下: (1)重载startDocument函数: HRESULT STDMETHODCALLTYPE SAXContentHandhrImpl-:startDocument0 f // AfxMessageBox(”开始解析文档”); return SOK; _) (2)重载endDocument函数: HRESU1 STDME IH0DCAI.I『TYPE SAX 一一一一 f MxMessageBox(”文档解析完毕”); returnS-()K; ) (3)重载startElement函数: HRESULT STDMETHODCAI.I『TYPE A1ContentHandler::startElementf / in】 /wchar_t—RPC—FAR*pwchNamespaceUri, / in】 /int cchNamespaceUri, / in] /wchar—t—_RPCj、AR*pwchLocaiName。 【in1 ,int cchI. ̄calName, / inl /wchar_t—RPC—FAR*pwchRawName。 维普资讯 http://www.cqvip.com

・38・ 齐齐哈尔大学学报 2007年 / [in】 /int cchRawName, / [in】 /ISAXAttributes—RPC_FAR pAttributes) f AfxMessageBox(”开始分析标记”); Return S_OK; ) (4)重载endElement函数: HRESULT STDMETHODCALLTYPE A1ContentHandler::endElement( / 【in】 /wehar_t RPC_FAR pwchNamespaceUfi, / [in】 /int cchNamespaceUri, ,卓[in】 /wehar_t—RPC_FAR pwchLocalName, [in】 /int cchLocalName, / [in】 /wchar_t—RPC_FAR pwchRawName, / [in】 /int cchRawName, / [in】 /ISAXAttributes RPC_FAR pAttributes) f AfxMessageBox(”结束分析标记”); ReturnS_OK; ) (5)重载Characters函数: HRESULT STDMETHODCALLTYPE A 1 ContentHandler::characters( , 【in】 ,wehar_t RPC_FAR pwchChars, / [in】 /int cchChars) f MxMessageBox(”这是标记的内容”); Return S_OK; ) 2)建立应用程序。实现了相应的接121之后,用户就可以建立应用程序调用相应的类来解析XML文档。 如下是定义SAXXMLReader,ContentHandler类型的对象,并设置XML文档读取类的解析事件类,代码如下。 pReader.CreateInstance(._uuidof(SAXXMLReader)); A1ContentHandler palch=A1Content pReader->putContentHandler(palch); wchar t URL[1 003]; mbstowcs(URL,fLPCrSrR)xmlpath,999); pReader->parseURL(URL); pReader->Rehase0; 3结束语 DOM和SAX这两种解析技术各有特点。当应用程序需要不断地导航、修改文档或随机地一次访问整 个文档时,可以优先考虑DOM解析。SAX是读取和操作XML数据的更快速、更轻量的方法。但由于没有 将整个XML文档调人内存,应用程序就不能不断地导航、修改XML文档或随机地一次访问XML文档中的 任意数据。对于大型文件,如果只使用XML文档中的少量部分,那么使用SAX比较恰当。 参考文献 【1】【美1 Deitel康博译.XML编程技术大全【M】.北京:清华大学出版社,2002. 【2]吴金平等.Visual c++6.0【M】.北京:中国水利水电出版社。2004. 【3】王惠.基于SAX的文档解析技术的研究和实现fJ】.电脑知识与技术,2006. 维普资讯 http://www.cqvip.com 第5期 基于VC平台的XML解析技术分析 ・39・ [4]贾素来.XML文档解析技术分析【J】.电脑开发与应用,2007. Based on VC platform XML analysis technology WEN Bi—long ,GUAN Xiang—rui ,ZHOU Kai (1.Computer&Information Technology College.Daqing Petroleum Insittute,Heilongjiang Daqing 163318.China; 2.Daqing Oil Field Limited Company Second Factory Information Center,Heilongjiang Daqing 163414.Chm ̄) Abstract:The XML data of the nesting mark elemental composition,the mark has contained causes it to the documents memory form and the logical description XML nesting mark to suit describes on the Web half structure data.XML not only carl express the documents content,moreover may express the documents structure.Usually analyzes the XML documents to have two methods:One kind iS documents object medel D0M(Document Object Mode1),moreover one kind is XML simple connection SAX(Simple API f0r XML).,rhis article has separately carried on the introduction to these two methods,and has realized under the VC6 environment to the XML documents analysis. Key words:XML analyzes;DOM;SAX;VC 短波辐射源的单站定位研究 无线电测向一般通过“三角法”对被测电台定位。按照三角法,定位一个被测电台至少需要两台位于不同地点的测向机, 并且这两台测向机和被测电台须不在一条直线上。在短波波段可以只用一台测向机而实现对被测电台的定位。这就是所谓单 站定位技术。这是短波辐射源测定定位的一个特别之处。如果反射短波信号的电离层高度(准确地说是“等效电离层高度”) 已知,那么,根据测得的来波的方位和仰角可对其辐射源定位。 使用单个测向站定位的原理.如图1所示。假设电波是在发射机和测向机的中间点被反射,距离R。电离层高度h和 仰角 有如下关系:tan0= 。因此.可以通过测量 来波的仰角.计算出目标的距离。知道了目标的距离和它 的角度.就可将其定位。上述推导是在假设电离层和地球 是平面的条件下得到的。如果使用球面进行推导,定位会 更加精确。如图2所示,如果测出的仰角为 .给定的等 效电离层高度为h,地球半径为R(等于6370 km),目 曩—坫 标定位在方位角 方向的地球大圆上.至测向站的地面 鹏 _2 -O-arcsin( )l 图l短波辐射源的单站定位 图2短波单站定位 短波单站定位技术有很大的局限。由于单站定位技术是以电波经过电离层一次反射为基础的,因此.只能对一跳路径传 播的电波的辐射源定位。对于多跳路径传播的电波.由单站定位技术计算得出的辐射源的距离比实际距离短。即使是对一跳 路径传播的电波.由于电离层的高度是变化不定的,电波可能从不同高度反射.单站定位系统也难以给出目标的准确距离。 在这种情况下,最好使用电离层探测设备,像电离层测高仪等来测定实时的电离层高度。在测量时通常是直接测量头顶电离 层的高度.并假设电离层是各向同性且整个区域的电离层高度是一致的。电离层的实际状况在通常情况下与这个假设有所不 同,所以用单站定位技术测量的短波辐射源的位置不精确。典型情况下.误差椭圆的轴的长度是目标距离的10%。目前。 全国短波监测网中所采用的单站定位技术,其电离层的高度是由电离层预测软件确定的。用预测软件给出的电离层高度计算 得出的辐射源的位置的准确度比用实时测得的电离层高度计算得出一般还要差一些。虽然单站技术有上述局限性。但是。在 短波监测网中.将三角定位与单站定位相结合来确定辐射源的位置,会使定位的结果更加可靠。 (王岩松。国家无线电监测中心哈尔滨监测站,哈尔滨150000) 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务