delphi中txmldocument控件的用法
delphi中对xml文件的解析做的很好,比直接使用ms的msxml2_tlb中的接口要方便很多,现称述于下面。,现称述于下面。
在讲之前先给出一个xml实例,在讲某些部分是要结合实例比较容易理解。,在讲某些部分是要结合实例比较容易理解。
1 <?xml版本=“ 1.0” encoding =“ gb2312”?> <! - 文档版本信息,注释格式同,注释格式同html->
2 <xmlpackage>
3 <clinetinfo ip =“ 202.101。
4 <data>
5 <行ID =”
6 <行ID =”
7 <! - 数据中包含了元素行的两个实例,通过属性-id予以区分->
8 </data>
9 <memo长度=”
10 <操作action =“ update/insert”/> <! - 该元素描述了一动作控制信息->
11 </xmlpackage>
txmldocument控件提供了我们两种常用做法:一、直接用这个类封装的属性和方法来读写 xml文件,xml数据绑定向导来创建一个适合用户自己的接口单元,然后按照这个接口单元提供的许多接口来实现对同类xml文件的读写,十分方便,但有局限性,我把它称为控件解析法。我重点讲第一种使用方法,我把它称为控件解析法。我重点讲第一种使用方法。
一、自己解析法:
下面我将按创建、读取、修改、添加和删除这五个动作来分三类讲述。
( 1 )创建和添加::
首先要创建xml实例,可以这样动态创建::
txmldocument.Create('f:/work/work/task/xml/lab_xml/country.xml');
也可以这样动态创建:
XML:= txmldocument.create(nil);
XML。 loadFromFile('f:/work/费亚的文件/task/xml/lab_xml/country.xml');
当然也可以从互联网面板上拖放一个txmldocument控件,然后再为文件名或xml属性赋值,比如对象名仍然叫xml (下都不说明都这样默认):
xml.fileName:= f:/work/费亚的文件/task/xml/lab_xml/country.xml;
至于它的另一个属性xml xml语言
xml.Active:= true;
这样下面对文件的读写操作才有效。如果没有xml xml的实例,即要建立xml文件,可以选择在上面一句之后
xml.savetofile('f:/work/费亚的文件/task/xml/lab_xml/country.xml');
下面就是创建节点了,需要结合上面的xml文件实例来讲述。首先一个xml文件只能有一个根节点
var rootnode:xmlnode;
rootNode:= xml.createnode('xmlpackage');
XML。纪录片:= rootNode;
接着我们创建不同类型的子节点,前面的实例中的第,前面的实例中的第,它是一个带有文本的子节点,同时又带有两个属性节点,我们来看看它是怎么,我们来看看它是怎么被创建的,首先创建一个根节点::
xml.Active:= true;
xml.documentElement:= xml.createnode('xmlPacage');
接着我们创建备忘录::
var节点:ixmlnode;
节点:= xml.createnode('memo');
xml.documentElement.ChildNodes.Add(node);
这种创建儿子节点的方法比较好,当然还可以::
xml.documentElement.Addchild('xmlPacage');
来创建,建议使用第一种,createNode方法的用法是很丰富的
node.childnodes.add(xml.createnode('Hello!i是yaya!',nttext));
注意createNode方法的第二个参数,我们继续看属性是怎么创建的::
node.attributenodes.add(xml.createnode('length',ntattribute));
node.setAttribute('长度',16);
node.attributenodes.add(xml.createnode('color',ntattribute));
node.setAttribute('color',$ 0034494b);
最后别忘了保存哦:
xml.savetofile('f:/work/费亚的文件/task/xml/lab_xml/test.xml');
xml.Active:= false;
到此我们就结束了创建到此我们就结束了创建一目了然,不再详述了。,不再详述了。
2)读取和修改
读取比较简单,主要是读取子节点的文本和属性值,方法是比较简单,关键就是要利用ixmlnodelist接口来提供的一些属性和方法来循环搜索到指定节点就ok读取方法在delphi中提供的方法有很多,我就讲一种:nodeValue属性,它是ixmlnode接口的一个属性,它的值是olevariant类型,意味着我们在xml文件里虽然都是存的字符串,但delphi会帮我们来转换数据格式,比如有个属性节点叫节点:
Node.NodeValue:= 16; // 16是整数类型
虽然在xml文件中保存的是aascii格式的16,但当我们要读取的时候delphi还会帮我们换回来的,只要这样就可以了::
var len:整数;
len:= node.nodevalue;
当然我们要注意的就是,用这种方法读取的时候最好先查看同一节点的,用这种方法读取的时候最好先查看同一节点的,属性,因为有几种类型的节点避免发生异常,对照如下::
结节型 | 节点值 |
ntattribute属性节点 | 属性的值 |
ntelement元素节点 | 如果这个节点没有子节点,就返回它的文字,否则有异常 |
nttext文本节点 | 文字的内容 |
上面讲的都是读和写节点的值,有时候也要读和写节点名,就要访问nodename属性
结节型 | nodename |
ntattribute属性节点 | 属性的名字 |
ntelement元素节点 | 节点的名字 |
nttext文本节点 | '#文本' |
读取就完了,当然我们上面是通过接口的属性来做的,接口也有方法来完成,就不说了,对上面的几个属性都是可读可写的,所以修改也基本清楚了。
3(3)删除
删除主要给出了删除指定节点,主要是看ixmlnodelist接口的几个方法,clear delete方法,其中前一个是全部清空,后一个是删除指定的子节点,这个方法是重载的,可以按名字,可以按名字也可以按顺序号,即,计数,非常方便!,非常方便!
二、控件解析法:
为控件的文件名属性选择一个xml样板文件,然后由击控件选择xml数据绑定向导…,在这个向导中间会创建一个xdb文件。在弹出的向导中,第一页中,可以看到把xml文件中的各个节点对应到了接口,这里你可以展开每个节点,编辑每个节点的属性数据类型。单击,下一个,这里你可以看到delphi生成了各个节点接口的框架代码。finsh完成向导,这样delphi xdb xml xml xml xml xml文件时,只需要参照生成的xml接口单元里的方法和属性就能很方便的读取节点:
var xml:ixmlxmlpackageType; //通过向导生成的根接口
开始
XML:= loadXmlPacage(''f:/work/work/费亚的文件/task/xml/lab_xml/test.xml'); //这个方法也是生成的接口单元中的。
xml.data.Row [1] .name; //比如我要取得数据下的第2个行中的名称属性。
很方便的,完全可以只要一个这样的接口单元就可以了,其它的什么都可以不要。接口单元中除了loadxmlPacage方法还有newxmlpacage方法和getxmlPacage方法,这三个方法是可以用于获得刚开始的xml实例对象的,同时这个单元中所有新的接口也是继承ixmlnode接口的,xml实例,其它格式的要再重新创建一个对应的xml接口单元才可以。
时间:
作者:费亚