delphi操作xml学习笔记 之一 入门必读

Delphi 对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单元主要存在与…\Borland\Delphi7\Source\Xml目录下,主要包括: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的支持也是非常完善的。

时间: 2024-09-29 08:08:01

delphi操作xml学习笔记 之一 入门必读的相关文章

C# 操作XML学习笔记

1. Customers.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <cust:customers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Customers.xsd" 3 xmlns:cust="http://asn.

XML学习笔记(五):使用 jdom和dom4j 解析XML

XML解析的详细分析与jaxp解析XML详见:XML学习笔记(四):使用 DOM和SAX 解析XML 一.JDom 1.创建XML文件: 1)Document类即代表整个XML文档,把生成的 Document 利用 XMLOutputter 类输出即可. 2)映射关系:元素:Element:属性:Attribute:注解:Comment:文本信息:Text: 3)注意:addContent()是追加,setContent()会覆盖. /** * 创建XML * * @throws IOExcep

xml学习笔记(1)

xml 学习笔记 XML : W3C 提供的可拓展的HTMl标签 作用 : 存储,配置 数据存储在XMl中,写好XML文件后要用程序去读取其中的数据,而读取程序的过程叫做解析. xml 的解析方式分为两种: dom (Document Objecct Model 文档对象模型) W3C组织推荐的解析模式 Sax (Simple API for Xml )是xml社区事实上的标准 ,几乎所有的XML解析器都支持它 XML 解析器: Crimson(sun ) Xerces(IBM) Aelfred

springmvc学习笔记(5)-入门程序小结

springmvc学习笔记(5)-入门程序小结 springmvc学习笔记5-入门程序小结 入门程序配置小结 非注解的完整的配置文件 注解的完整配置文件 通过入门程序理解springmvc前端控制器.处理器映射器.处理器适配器.视图解析器用法.并附上入门程序的非注解的完整的配置文件,注解的完整配置文件. 入门程序配置小结 前端控制器配置: 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以访问的地址都由DispatcherServl

xml学习笔记 6.XQuery

XQuery xml query 是一种专门用于xml半结构化数据的查询语言,是W3C的推荐的标准语言. XQuery是有一些SQL专家制定的,基本语法与sql语句非常相似.比xslt更加简单. FLOWR语句与select语句相对应,完成对xml数据的查询,筛选和排序.FLOWR是指FOR,LET,WHERE,ORDERBY,RETURN五种语句.其中可以使用XPATH路径表达式以及xpath中的内置函数,各种自定义的函数,和命名空间. for子句: for $b in doc("bib-de

Delphi 操作 XML(一)

一.欢迎 本帮助文件提供从SimDesign BV的NativeXml组件的信息. 二.购买NativeXml! NativeXml现在是开源的,但支持是仅专门适用于购买NativeXml的客户. 您可以通过此链接购买NativeXml:http://www.simdesign.nl/xml.html 价格:29.95欧元 采购NativeXml的优势: 两年的通过电子邮件或特殊的"NativeXml Source"论坛支持,接收测试和修正,并从"NativeXml Sour

delphi 操作 XML (二)

在装有Win7 32位系统的台式机上 先卸载旧驱动,再重新安装. 对设备管理器里的U转串口设备从本地更新驱动,选择下图文件 系统弹出红色提示框(是否安装XXXX驱动),选择安装,随后该设备由无法启动变为工作正常. 在Win8 64位系统上 安装驱动后,出现下图情况,设备无法启动(错误代码10) 选择08年的驱动后,串口恢复正常. 总结 这些驱动有很多不兼容的,特别是在高级Windows版本或64位系统上,解决的思路就是多尝试安装各种版本,并根据串口状态调整安装策略. delphi 操作 XML

C#操作XML学习(一)

一.简单介绍 using System.Xml; //初始化一个xml实例 XmlDocument xml=new XmlDocument(); //导入指定xml文件 xml.Load(path); xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml")); //指定一个节点 XmlNode root=xml.SelectSingleNode("/root"); //获取节点下所有直接

现代C++学习笔记之一入门篇:智能指针(C++ 11)

原始指针:通过new建立的*指针 智能指针:通过智能指针关键字(unique_ptr, shared_ptr ,weak_ptr)建立的指针 在现代 C++ 编程中,标准库包含智能指针,该指针用于确保程序不存在内存和资源泄漏且是异常安全的. 在现代 C++ 中,原始指针仅用于范围有限的小代码块.循环或者性能至关重要且不会混淆所有权的 Helper 函数中. 1 void UseRawPointer() 2 { 3 // Using a raw pointer -- not recommended