工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > Delphi > 正文
TXMLDocument类:Delphi7的XML利器
[文章信息]
作者:zhj
时间:2005-03-31
出处:Delphi先锋网
责任编辑:方舟
[文章导读]
Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写
advertisement
专题教程宝典
【软件应用】
【办公软件】
【图形图像】
【网页制作】
【操作系统】
【网络安全】
【程序开发】
【日报周刊】
【多媒体教程】
· 天极软件应用多媒体教程
· 电脑美术设计中的色彩表现
· MFC程序员的WTL开发指南
· 多媒体系列教程:网页设计制作
· Win XP系统应用技巧完全手册
· 3Ds max7多边形建模从入门到进阶
· 微软对.NET失去信心?.NET专家激起千层浪
· Outlook Express使用技巧大全(一)
· 抢先试用卡巴斯基 KIS 2006
· 自己动手制作手机Flash主题动画
[正文]
  Delphi7 支持对XML文档的操作,可以通过TXMLDocument类来实现对XML文档的读写。可以利用TXMLDocument把XML文档读到内存中,从而可以进行编辑、保存操作。TXMLDocument类是通过DOM(文档对象模型)接口来访问XML文档中的各个元素的。对于DOM接口的实现有多种方式,Delphi支持的方式有:

  1)微软的MSXML SDK,这种方式是通过COM对象来实现;

  2) Apache 的Xerces的实现方式;

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

  支持XML的Delphi单元主要存在与…\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的支持也是非常完善的。

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 基于Delphi的Socket I/O模型全接触
  • 用Delphi实现QQ窗体的缩入伸出功能
  • Delphi中用ICMP探测远程主机状态
  • 一种树型控件在Delphi中的使用方法
  • 利用Indy的TIdFtp控件实现FTP协议
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 【315】华硕笔记本电脑漏电 存在设计缺陷
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • Advertisement

    天极无线
    经典名曲 华语流行 欧美风情 人声音效 原声大碟
    你好周杰伦-安又琪
    直线-张韶涵
    天边-张韶涵
    看我72变-蔡依林
    乱世佳人-Twins
    全世界下雨-张娜拉
    我们的爱-飞儿乐队
    分手快乐-梁静茹
    爱在西元前-周杰伦
    三万英尺-迪克牛仔
    爱如潮水-张信哲
    爱情宣言-齐秦
    寻找玛依拉-刀郎
    驼铃-刀郎
    老鼠爱大米-杨臣刚
    功夫主题曲
    仙剑主题曲杀破狼
    天下无贼片尾曲
    冲动的惩罚-刀郎
    情人-刀郎
    爱情-莫文蔚
    挪威的森林-伍佰
    奔跑 - 羽泉
    因为爱 - 羽泉
      ·时尚女人圈
    ·经典影视专集
    ·美女秀场
    ·美丽大自然专题
    ·流行金曲
    ·科幻电影特区
    | 最新推荐
    ·你好周杰伦
    ·杀破狼
    ·寻找玛依拉
    ·孤单公园
    ·男人海洋
    | 魔术铃声
    ·少女丰胸
    ·少妇丰胸
    ·减肥魔铃
    ·增高魔铃
    ·美容魔铃

    今日报价查询 更多报价