delphi中txmldocument控件的用法
delphi中对xml文件的解析做的很好、比直接使用ms的msxml2_tlb中的接口要方便很多、现称述于下面。
在讲之前先给出一个xml实例、在讲某些部分是要结合实例比较容易理解。
1 <?xml version = "1.0" encoding = "gb2312"?> <!
2 <xmlpackage>
3 <ClinetInfo IP =” 202.101。
4 <データ>
5 <row id =”
6 <row id = "
7 <! - データ中包含了元素列的两个实例、通过属性id予以区分 - >
8 </data>
9 <メモの長さ=”
10 <アクションacition =” update/insert”/> <! - 该元素描述了一动作控制信息 - >
11 </xmlpackage>
txmldocument控件提供了我们两种常用做法:一、直接用这个类封装的属性和方法来读写 xml文件、我把它称为自己解析法;二、用控件提供的 xmlデータバインディングウィザード来创建一个适合用户自己的接口单元、然后按照这个接口单元提供的许多接口来实现对同类xml文件的读写、十分方便、但有局限性、我把它称为控件解析法。我重点讲第一种使用方法。
一、自己解析法:
下面我将按创建、读取、修改、添加和删除这五个动作来分三类讲述。
( 1 )创建和添加:
首先要创建xml实例、可以这样动态创建:
txmldocument.create( 'f:/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.active:= true;
这样下面对文件的读写操作才有效。如果没有XML XML的实例、即要建立Xml文件、可以选择在上面一句之后、对Xml实例操作、操作完毕之后加上、操作完毕之后加上:
xml.savetofile( 'f:/work/费亚的文件/task/xml/lab_xml/country.xml');
下面就是创建节点了、需要结合上面的XML
var rootnode:xmlnode;
rootnode:= xml.createnode( 'xmlpackage');
XML。 documentlement:= rootnode;
接着我们创建不同类型的子节点、前面的实例中的第9行的节点比较有代表性、它是一个带有文本的子节点、同时又带有两个属性节点、我们来看看它是怎么被创建的、首先创建一个根节点:
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 are yaya!'、nttext));
注意createNode方法的第二个参数、我们继续看属性是怎么创建的:
node.attributenodes.add(xml.createNode( 'length'、ntattribute));
node.setattribute( 'length'、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;
到此我们就结束了创建、、至于添加、即插入节点、要插在指定节点后将上面的add(constノード:ixmlnode)方法换成insert(index:integer; const node:ixmlnode)、其它用法也就一目了然、不再详述了。
(2 )读取和修改
读取比较简单、、主要是读取子节点的文本和属性值、方法是比较简单、关键就是要利用Ixmlnodelist接口来提供的一些属性和方法来循环搜索到指定节点就わかりました读取方法在delphi中提供的方法有很多、我就讲一种、我就讲一种:nodevalue属性、它是、ixmlnode接口的一个属性、它的值是olevariant类型、意味着我们在xml 、但delphi、比如有个属性节点叫ノード:
node.nodevalue:= 16; // 16 integer类型
虽然在xml文件中保存的是ascii
Var Len:整数;
len:= node.nodevalue;
当然我们要注意的就是、用这种方法读取的时候最好先查看同一节点的nodeType属性、因为有几种类型的节点避免发生异常、对照如下对照如下:
nodeType | Nodevalue |
ntattribute属性节点 | 属性的值 |
ntelement元素节点 | 如果这个节点没有子节点、就返回它的テキスト、否则有异常 |
nttext文本节点 | テキスト的内容 |
上面讲的都是读和写节点的值、有时候也要读和写节点名、就要访问nodename属性、使用方法大概相同、也要结合nodevalue来使用:
nodeType | nodename |
ntattribute属性节点 | 属性的名字 |
ntelement元素节点 | 节点的名字 |
nttext文本节点 | '#文章' |
读取就完了、当然我们上面是通过接口的属性来做的、接口也有方法来完成、就不说了、对上面的几个属性都是可读可写的、所以修改也基本清楚了。
(3 )删除
删除主要给出了删除指定节点、主要是看、ixmlnodelist接口的几个方法、clear和、削除、其中前一个是全部清空、后一个是删除指定的子节点、这个方法是重载的、可以按名字也可以按顺序号、即カウント属性、非常方便!
二、控件解析法:
为控件的ファイル名xml样板文件、然后由击控件选择xmlデータバインディングウィザード…、在这个向导中间会创建一个xdb文件。在弹出的向导中、第一页中、可以看到delphi已经帮你把xml文件中的各个节点对应到了接口、这里你可以展开每个节点、编辑每个节点的属性数据类型。单击、次へ到下一个配置页面、这里你可以看到delphi生成了各个节点接口的框架代码。单击finsh完成向导、这样delphi能很方便的读取节点:
var xml:ixmlxmlpackageType; //通过向导生成的根接口
始める
xml:= loadxmlpacage( '' f:/work/费亚的文件/task/xml/lab_xml/test.xml '); //这个方法也是生成的接口单元中的。
xml.data.row [1] .name; //比如我要取得データ2个列中的名属性。
很方便的、完全可以只要一个这样的接口单元就可以了、其它的什么都可以不要。接口单元中除了loadxmlpacage方法还有newxmlpacage实例对象的、同时这个单元中所有新的接口也是继承、ixmlnode接口的、所以你不必担心方法不够用。当然只能访问类似结构的xml实例、其它格式的要再重新创建一个对应的xml接口单元才可以。
时间:
作者:费亚