社区
多媒体
帖子详情
帮帮忙,用VB6如何来解析XML文件?????
zhenggw1998
2003-08-27 08:57:42
帮帮忙,用VB6如何来解析XML文件?????谢谢各位老大
...全文
314
2
打赏
收藏
帮帮忙,用VB6如何来解析XML文件?????
帮帮忙,用VB6如何来解析XML文件?????谢谢各位老大
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pingfzp
2003-09-21
打赏
举报
回复
good
道素
2003-08-27
打赏
举报
回复
这个不是三两句就能说清楚的,建议看找本书看,网上很多
从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但是实际上微软已经给我们提供了一个XML语法解析器,如果你安装了IE5.0以上版本的话,实际上你就已经安装了XML语法解析器。可以从微软站点(www.microsoft.com)下载最新的MSXML的SDK和Parser文件。它是一个叫做MSXML.DLL的动态链接库,最新版本为msxml3,实际上它是一个COM对象库,里面封装了所有进行XML解析所需要的所有必要的对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象。所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是脚本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。下面的关于XML文档对象模型的介绍是基于微软最新的msxml3为基础进行的。
三、XML文档对象(XML DOM)模型分析
XML DOM对象提供了一个标准的方法来操作存储在XML文档中的信息,DOM应用编程接口(API)用来作为应用程序和XML文档之间的桥梁。
DOM可以认为是一个标准的结构体系用来连接文档和应用程序(也可以是剧本语言)。MSXML解析器允许你装载和创建一个文档,收集文档的错误信息,得到和操作文档中的所有的信息和结构,并把文档保存在一个XML文件中。DOM提供给用户一个接口来装载、到达和操作并序列化XML文档。DOM提供了对存储在内存中的XML文档的一个完全的表示,提供了可以随机访问整个文档的方法。DOM允许应用程序根据MSXML解析器提供的逻辑结构来操作XML文档中的信息。利用MSXML所提供的接口来操作XML。
实际上MSXML解析器根据XML文档生成一个DOM树结构,它能够读XML文档并根据XML文档内容创建一个节点的逻辑结构,文档本身被认为是一个包含了所有其他节点的节点。
DOM使用户能够把文档看成是一个有结构的信息树,而不是简单的文本流。这样即使不知道XML的语义细节,应用程序或者是脚本也能够方便地操作该结构。DOM包含两个关键的抽象:一个树状的层次、另一个是用来表示文档内容和结构的节点集合。树状层次包括了所有这些节点,节点本身也可以包含其他的节点。这样的好处是对于开发人员来说,他可以通过这个层次结构来找到并修改相应的某一个节点的信息。DOM把节点看成是一个通常的对象,这样就有可能创建一个剧本来装载一个文档,然后遍历所有的节点,显示感兴趣的节点的信息。注意节点可以有很多中具体的类型,比如元素、属性和文本都可以认为是一个节点。
微软的MSXML解析器读一个XML文档,然后把它的内容解析到一个抽象的信息容器中称为节点(NODES)。这些节点代表文档的结构和内容,并允许应用程序来读和操作文档中的信息而不需要显示知道的XML的语义。在一个文档被解析以后,它的节点能够在任何时候被浏览而不需要保持一定的顺序。
对开发人员来说,最重要的编程对象是DOMDocument。DOMDocument对象通过暴露属性和方法来允许浏览、查询和修改XML文档的内容和结构,每一个接下来的对象暴露自己的属性和方法,这样就能够收集关于对象实例的信息,操作对象的值和结构,并导航到树的其他对象上去。
MSXML.DLL所包括的主要的COM接口有:
(1)DOMDocument
DOMDocument对象是XML DOM的基础,你可以利用它所暴露的属性和方法来允许你浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点。它实现了DOM文档的所有的基本的方法并且提供了额外的成员函数来支持XSL和XSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。
(2)IXMLDOMNode
IXMLDOMNode是文档对象模型(DOM)中的基本的对象,元素,属性,注释,过程指令和其他的文档组件都可以认为是IXMLDOMNode,事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。
(3)IXMLDOMNodeList
IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过“for...next”结构来遍历所有的节点。
(4)IXMLDOMParseError
IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号,行号,字符位置和文本描述。
下面主要描述一个DOMDocument对象的创建过程,这里用VC描述创建一个文档对象的过程。
HRESULT hr;
IXMLDomDocument* pXMLDoc;
IXMLDOMNode* pXDN;
Hr=CoInitialize(NULL); //COM的初始化
//得到关于IXMLDOMDocument接口的指针pXMLDOC。
hr=CoCreateInstance(CLSID_DOM Document,NULL,CLSCTX_INPPROC_SERVER,
IID_IXMLDOMDocument,(void**) &pXMLDoc);
//得到关于IXMLDOMNode接口的指针pXDN。
hr=pXMLDoc->QueryInterface (IID_IXMLDOMNode,(void**)&pXDN);
在MSXML解析器使用过程中,我们可以使用文档中的createElement方法来创建一个节点装载和保存XML文件。通过load或者是loadXML方法可以从一个指定的URL来装载一个XML文档。Load(LoadXML)方法带有两个参数:第一个参数xmlSource表示需要被解析的文档,第二个参数isSuccessful表示文档装载是否成功。Save方法是用来把文档保存到一个指定的位置。Save方法有一个参数destination用来表示需要保存的对象的类型,对象可以是一个文件,一个ASP Response方法,一个XML文档对象,或者是一个能够支持持久保存(persistence)的客户对象。下面是save方法使用的一个简单的例子(具体程序请参见http://www.swm.com.cn/swm/200101/利用MSXML解析XML文本)。
同时,在解析过程中,我们需要得到和设置解析标志。利用不同的解析标志,我们可能以不同的方法来解析一个XML文档。XML标准允许解析器验证或者不验证文档,允许不验证文档的解析过程跳过对外部资源的提取。另外,你可能设置标志来表明你是否要从文档中移去多余的空格。
为了达到这个目的,DOMDocument对象暴露了下面几个属性,允许用户在运行的时候改变解析器的行为:
(1)Async(相对于C++是两个方法,分别为get_async和put_async)
(2)ValidateOnparse(相对于C++是两个方法,分别为get_validate OnParse和 put_validateOnParse)
(3)ResolveExternals(相对于C++是两个方法,分别为get_ Resolve Externals和put_ ResolveExternals)
(4)PersercveWhiteSpace(相对于C++是两个方法,分别为get_ Perser cveWhiteSpace和put_ Persercve WhiteSpace)
每一个属性可以接受或者返回一个Boolean值。缺省的,anync,vali dateOnParse,resolveExternals的值为TRUE,perserveWhiteSpace的值跟XML文档的设置有关,如果XML文档中设置了xml:space属性的话,该值为FALSE。
同时在文档解析过程中可以收集一些和文档信息的信息,实际上在文档解析过程中可以得到以下的信息:
(1)doctype(文档类型):实际上是和用来定义文档格式的DTD文件。如果XML文档没有相关的DTD文档的话,它就返回NULL。
(2)implementation(实现):表示该文档的实现,实际上就是用来指出当前文档所支持的XML的版本。
(3)parseError(解析错误):在解析过程中最后所发生的错误。
(4)readyState(状态信息):表示XML文档的状态信息,readyState对于异步使用微软的XML解析器来说的重要作用是提高了性能,当异步装载XML文档的时候,你的程序可能需要检查解析的状态,MSXML提供了四个状态,分别为正在状态,已经状态,正在解析和解析完成。
(5)url(统一资源定位):关于正在被装载和解析的XML文档的URL的情况。注意如果该文档是在内存中建立的话,这个属性返回NULL值。
在得到文档树结构以后,我们可以操作树中的每一个节点,可以通过两个方法得到树中的节点,分别为nodeFromID和getElementsByTagName。
nodeFromID包括两个参数,第一个参数idString用来表示ID值,第二个参数node返回指向和该ID相匹配的NODE节点的接口指针。注意根据XML的技术规定,每一个XML文档中的ID值必须是唯一的,而且一个元素(element)仅且只能和一个ID相关联。
getElementsByTagName方法有两个参数,第一个参数tagName表示需要查找的元素(Element)的名称,如果tagName为“*”的话返回文档中所有的元素(Element)。第二个参数为resultList,它实际是指向接口IXMLDOMNodeList的指针,用来返回和tagName(标签名字)相关的所有的Node的集合。
下面是一个简单的例子(具体程序请参见http://www.swm.com.cn/swm/200101/利用MSXML解析XML文本)。
最后讨论一下如何来创建新的节点,实际上可以通过方法createNode来创建一个新的节点。CreateNode包括四个参数,第一个参数Type表示要创建的节点的类型,第二个参数name表示新节点的nodeName的值,第三个参数namespaceURI表示该节点相关的名字空间,第四个参数node表示新创建的节点。注意可以通过使用已经提供的类型(Type),名称(name)和名字空间(nodeName)来创建一个节点。
当一个节点被创建的时候,它实际上是在一个名字空间范围(如果已经提供了名字空间的话)内创建的。如果没有提供名字空间的话,它实际上是在文档的名字空间范围内创建的。
四、利用MSXML进行XML文档分析的简单实例
为了说明如何在VC中使用XML DOM模型,这里显示了一个简单的实例程序(具体程序请参见http://www.swm.com.cn/swm/200101/利用MSXML解析XML文本),是一个Console Application。下面是主要的程序代码,本代码用来在一个XML文档中定位一个特殊的Node节点,并插入一个新的子节点。
CKXML
解析
器与构建器:
VB6
中的XML操作开源工具
CKXML Parser & Builder是一个专为Visual Basic 6.0设计的开源XML处理工具包,它通过面向对象的方式简化了XML的
解析
与构建过程。本文详细介绍了CKXML的开源之旅、XML文档
解析
与构建的理论基础、面向对象的XML操作方法以及CKXML在
VB6
中的应用案例。CKXML不仅提供了丰富的API和教程文档,还包含了源代码和测试用例,是学习XML操作和
VB6
编程的经典资源。
VB.Net实现的XML编辑器源码
解析
本文围绕VB.Net实现的XML编辑器源码展开,先介绍XML基本概念,接着阐述VB.Net处理XML的基础,包括文档结构、.NET框架的支持等。还讲解了System.Xml命名空间应用、
XML文件
加载与
解析
方法(DOM和SAX),以及节点遍历、操作(创建、编辑、删除)等内容,助开发者掌握相关技术。
VB6
操作XML
本文介绍如何使用VBA通过MSXML2组件创建
XML文件
,并演示了如何设置XML结构及属性。此外,还提供了读取
XML文件
并
解析
特定节点内容的方法。
如何用
vb6
.0采用xml-rpc联接访问后台web
本文分享了
VB6
结合XML-RPC与后台Web服务器联结的方案。因项目需求,客户端用
VB6
编写需访问外部网络数据,又不想开放外网权限,且不想将
VB6
程序全转为网页。分别给出了以PHP和Python为后台Web服务语言的解决方案,还介绍了客户端
VB6
联接Web服务器的具体步骤。
VB.Net - XML处理
本文介绍VB.Net中XML处理的基本概念,包括.NET框架中System.Xml命名空间的类介绍,以及使用SAX和DOM两种API
解析
XML文件
的具体示例。
多媒体
807
社区成员
8,274
社区内容
发帖
与我相关
我的任务
多媒体
VB 多媒体
复制链接
扫一扫
分享
社区描述
VB 多媒体
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章