学院首页>网页制作>XML>Delphi7对XML的支持分析

Delphi7对XML的支持分析

作者: 来源: 添加时间:2006-5-24 13:34:08

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

  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的支持也是非常完善的。
第 2 页,共 2 页 [1] [2]
站内搜索