选择显示字体大小

txmldocument类:delphi7的xml利器

  delphi7 支持对xml文档的操作,可以通过txmldocument类来实现对xml文档的读写。可以利用txmldocument把xml文档读到内存中,从而可以进行编辑、保存操作。txmldocument类是通过dom(文档对象模型)接口来访问xml文档中的各个元素的。 对于dom接口的实现有多种方式,delphi支持的方式有:

   1)微软的msxml sdk,这种方式是通过com对象来实现;

   2) apache 的xerces的实现方式;

   3)另外一种是开源openxml实现方式。对于不同的接口实现方式可以通过设定txmldocument的domvender来进行控制。

   支持xmldelphi单元主要存在与…\borland\delphi7\source\xml目录下,主要包括:xmlintf,xmldoc,xmldom,msxmldom,xercesxmldom,xdom,oxmldom等单元。

   ·xmlintf――包括了borland自己定义的xml文档的接口;

   ·xmldoc――是对xmlintf中所定义接口的borland实现;

   ·xmldom――定义了dom(文档对象模型)接口,这里对dom接口进行了borland的实现;

   ·msxmldom――实现微软对xmldom中定义的接口的实现,主要调用微软的com对象来实现,对xmldom中定义接口的封装;

   ·xercesxmldom――borland通过xerces xml dom方式来实现对xmldom中定义接口的封装; l oxmldom――borland通过使用openxml来实现对xmldom中定义接口的封装;

   txmldocument类的属性,请参考borland的帮助文件;

   读写xml文档

   ·读取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);

   ·保存xml文档

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

xmldoc := newxmldocument;

iroot := ixmldoc.createnode(‘testxmldocument’);

xmldoc.documentelement := iroot;



xmldoc.savetofile(filename);

   可以看出通过接口来操作xml文档是非常方便的;

   选用不同类型的xml解析方式

   上面已经提到有三种方式实现dom,也就是可以应用borland提供的3种不同的xml解析器来对xml文档进行解析;

   ·三种解析器

   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解析器;

   ·使用不同解析器的比较

   对于三种方式的解析器比较如下:

   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解析的源代码,那么应用这种方式,可以避免软件发布的种种问题,这是由于解析的代码被静态编译在应用程序内部。唯一不好的地方就是应用程序的体积可能要大一些;

   ·如何使用不同的解析器

   我们可以写一个函数来使用不同的解析器;

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的支持也是非常完善的。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons