Delphi7对XML的支持分析

2016-02-19 19:34 33 1 收藏

下面请跟着图老师小编一起来了解下Delphi7对XML的支持分析,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

Delphi7对XML的支持分析 zhjDelphi7对XML的支持---TXMLDocument类       Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写。可以利用TXMLDocument把XML文档读到内存中,从而可以进行编辑、保存操作。TXMLDocument类是通过DOM(文档对象模型)接口来访问XML文档中的各个元素的。对于DOM接口的实现有多种方式,Delphi支持的方式有:1)微软的MSXML SDK,这种方式是通过COM对象来实现;2) Apache 的Xerces的实现方式;3)另外一种是开源OpenXML实现方式。对于不同的接口实现方式可以通过设定TXMLDocument的DOMVender来进行控制。       支持XML的Delphi单元主要存在与…BorlandDelphi7SourceXml目录下,主要包括:XMLIntf,XMLDoc,xmldom,msxmldom,xercesxmldom,xdom,oxmldom等单元。

  l         XMLIntf――包括了Borland自己定义的XML文档的接口;l         XMLDoc――是对XMLIntf中所定义接口的Borland实现;l         Xmldom――定义了DOM(文档对象模型)接口,这里对DOM接口进行了Borland的实现;l         Msxmldom――实现微软对Xmldom中定义的接口的实现,主要调用微软的COM对象来实现,对Xmldom中定义接口的封装;l         Xercesxmldom――Borland通过Xerces XML DOM方式来实现对Xmldom中定义接口的封装;l         Oxmldom――Borland通过使用OpenXML来实现对Xmldom中定义接口的封装;

  TXMLDocument类的属性,请参考Borland的帮助文件;

  读写XML文档l         读取XML文档通常情况下不通过直接使用TXMLDocument对象来进行XML文件的读取,而是使用XMLDoc单元中提供的几个有用的函数来读取XML文档,这些函数包括:function LoadXMLDocument(const FileName: DOMString): IXMLDocument;function LoadXMLData(const XMLData: DOMString): IXMLDocument; overload;function LoadXMLData(const XMLData: string): IXMLDocument; overload;function NewXMLDocument(Version: DOMString = '1.0'): IXMLDocument;可以看出这些函数全部返回的是IXMLDocument接口,得到了IXMLDocument接口在进行文档的操作;这些函数都是通过创建TXMLDocument对象来实现对XML文档的读取的;其中NewXMLDocument仅仅创建一个IXMLDocument接口。可以这样利用NewXMLDocument来读取XML文档:    XMLDoc := NewXMLDocument;XMLDoc.LoadFromFile(FileName);

  l         保存XML文档可以通过下面的方式来保存XML文档:

             XMLDoc := NewXMLDocument;           iRoot := IXMLDoc.CreateNode(‘TestXMLDocument’);           XMLDoc.DocumentElement := iRoot;           …           XMLDoc.SaveToFile(FileName);              可以看出通过接口来操作XML文档是非常方便的;

  选用不同类型的XML解析方式       上面已经提到有三种方式实现DOM,也就是可以应用Borland提供的3种不同的XML解析器来对XML文档进行解析;l         三种解析器1、微软的解析器(MSXML SDK)微软解析器主要应用在Windows中,在安装MSXML SDK的时候会安装解析器,同时IE浏览器也提供了解析器,这个解析器是一个COM。2、Apache的Xerces解析器Borland自己实现了一个Xerces解析器,这个可以通过调用xercesxmldom.dll模块来实现;如果使用这个解析器可能需要同应用程序一起进行分发xercesxmldom.dll,XercesLib.dll,CC3260MT.DLL三个DLL文件3、OpenXML解析器这个解析器的源代码存在于xdom.pas单元中,这个可以通过http://www.philo.de/xml/进行跟新下载,这个是一个德国人写的XML解析器;l         使用不同解析器的比较对于三种方式的解析器比较如下:1、微软的解析器微软的解析器当然好了,但是也不能排除存在的意外情况,在我个人的经验中,至少我们公司对于XML解析的方式,只有在IE6.0以上的版本才能够正常的工作;至于,Borland同样是通过引入MSXML.DLL的接口来实现的,所以可以推理出,同样存在同样的问题;这个通过研究TMSDOMImplementation(msxmldom单元中)的实现方式可以得到证明,实现的过程中通过调用CoCreateInstance函数接口来实现解析的;在发布解析XML的代码的时候可能就会存在由于IE的本版的不同,需要把IE6.0一同发布,比较麻烦;2、Borland的Xerces解析器这种方式的解析器是通过 LoadLibrary(PChar(LibName));函数,LibName的内容是xercesxmldom.dll(Windows平台),libxercesxmldom.so.1(Linux平台)。那么就需要随同应用程序一起发布的Dll,就包括了xercesxmldom.dll,XercesLib.dll,CC3260MT.DLL;这个发布相对于发布不同版本的IE6.0来说要相对简单一些;3、OpenXML解析器由于存在xdom.pas单元,这个单元中包含了完全的XML解析的源代码,那么应用这种方式,可以避免软件发布的种种问题,这是由于解析的代码被静态编译在应用程序内部。唯一不好的地方就是应用程序的体积可能要大一些;

  l         如何使用不同的解析器我们可以写一个函数来使用不同的解析器;function NewDiffXmlDocument(DOMVender: string;  Version: DOMString = '1.0'): IXMLDocument;var  XMLDoc : TXMLDocument;begin  XMLDoc := TXMLDocument.Create(nil);  XMLDoc.DOMVendor := GetDOMVendor(DOMVender);  Result := XMLDoc;  Result.Active := True;  if Version '' then    Result.Version := Version;end;

  其中DOMVender如果用Borland提供的三种方式进行解析的话,分别取值是:       Microsoft――存在于msxmldom.pas单元中的SMSXML常量;       Xerces――存在于xercesxmldom .pas单元中的SXercesXML常量;       OpenXML――存在于oxmldom.pas单元中的SOpenXML常量;

  这个是由于在msxmldom,xercesxmldom,oxmldom三个单元的initailization部分,都通过调用RegisterDOMVendor函数,注册了不同的解析器接口;

  当然,Borland同样提供了一种可以灵活进行扩展的机制来扩展用户自己的解析器,这个需要继承,TDOMVendor类(存在于xmldom单元中)。实际上,Borland自己就是通过这种方式来实现不同方式解析器的;具体的实现过程可以通过参考oxmldom单元中对xdom的封装;

  结论       Delphi作为一个成功的开发工具,它自身实现的对XML的支持,肯定比网络上某些实现要稳定、高效的多,我们没有必要再进行另外的封装什么MSXML.DLL的COM接口。当然,可以自己实现不同的XML解析器,也可以应用已经存在的解析器。同时,可以看出Delphi对于XML的支持也是非常完善的。

  联系方式:zhihongjie@126.com

来源:http://www.tulaoshi.com/n/20160219/1621314.html

延伸阅读
标签: SQLServer
引言        我们可以很简单的使用ADO访问数据库中的数据,但是,如果我们想把从数据库中检索得到的数据以XML的格式显示出来的话,就要费点神了,当然,我们可以去找一些现成的应用程序或者是把现有的存储过程修改一下,来完成这个想法。        虽说ADO2.5宣称支持...
标签: Delphi
现在的大多数的鼠标都有鼠标轮,比如,当我们浏览网页时,鼠标轮上下移动,网页就自动上下滚动。鼠标轮的确给我们的操作带来很多方便,但是,在Delphi的大多数控件中都只支持 MouseDown,MouseUp,MouseMove等事件,而不直接支持MouseWheel事件,我们在帮助客户设计一个查看程序时就碰到这样的问题。这个查看程序的数据是放在一个DBGrid中...
标签: PHP
首先我得承认我喜欢计算机标准。如果每个人都遵从这个行业的标准,互联网将会是一个更好的媒体。使用标准化的数据交换格式才能使开放的和独立于平台的计算模式切实可行。这就是我作为XML爱好者的原因。   幸运的是,我最喜爱的脚本语言不但支持XML而且对其支持正不断加强。PHP可以让我迅速将XML文档发布到互联网上,收集XML...
标签: Delphi
XML(eXtensible Markup Language可扩展标志语言)在近几年的信息类杂志、网站上可谓是最抢眼的一词。大大小小的信息产品都争相和它搭上关系,唯恐赶不及这辆快车。有着良好口碑的宝蓝 (Borland)系列开发平台也不例外,从6.0版开始就集成了XML组件包,因其使用MSXMLDom解析器,相比于此前广泛应用的XMLParser解析器,MSXMLDom更显规范、...
标签: Web开发
几乎所有的主流浏览器均支持 XML 和 XSLT。 Mozilla Firefox 从 1.0.2 版本开始,Firefox 就已开始支持 XML 和 XSLT(包括 CSS)。 Mozilla Mozilla 含有用于 XML 解析的 Expat,并支持显示 XML + CSS。Mozilla 同时拥有对 Namespaces 的某些支持。 Mozilla 同样可做到对 XSLT 的执行(XSLT implementation)。 ...

经验教程

86

收藏

46
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部