delphi x txmldocument 控件的用法
delphi m xml 文件的解析做的很好 文件的解析做的很好, 比直接使用 MS 的 MSXML2_TLB 中的接口要方便很多, 现称述于下面。
在讲之前先给出一个 xml l l, 在讲某些部分是要结合实例比较容易理解。
1 <? xml 버전 = "1.0"encoding = "gb2312"?> <!-文档版本信息, 注释格式同 html->
2 <xmlpackage>
3 <ClinetInfo IP =”202.101.
4 <데이터>
5 <행 ID =”
6 <행 ID =”
7 <!-데이터 data 행 的两个实例 的两个实例, 通过属性 ID 予以区分->
8 </data>
9 <메모 길이 =”
10 <actions acition =”업데이트/삽입”/> <!-该元素描述了一动作控制信息->
11 </xmlpackage>
txmldocument 控件提供了我们两种常用做法 : 一、直接用这个类封装的属性和方法来读写 xml 文件, 我把它称为自己解析法;二、用控件提供的 xml 데이터 바인딩 마법사 来创建一个适合用户自己的接口单元, 然后按照这个接口单元提供的许多接口来实现对同类 xml 文件的读写, 十分方便, 但有局限性, 我把它称为控件解析法。我重点讲第一种使用方法。
一、自己解析法 :
下面我将按创建、读取、修改、添加和删除这五个动作来分三类讲述。
( 1 )) :
首先要创建 xml l l, 可以这样动态创建 :
txmldocument.create ( 'f :/work/费亚的文件 /task/xml/lab_xml/country.xml');
也可以这样动态创建 :
xml : = txmldocument.create (nil);
XML. loadfromfile ( 'f :/work/费亚的文件/费亚的文件 /task/xml/lab_xml/country.xml');
当然也可以从 인터넷 x TXMLDocument 控件 控件 控件, 然后再为 Filename 或 xml 属性赋值, 比如对象名仍然叫 xml + (下都不说明都这样默认) 추) :
XML.FILENAME : = f :/work/费亚的文件 费亚的文件 /task/xml/lab_xml/country.xml;
至于它的另一个属性 xml l xml 语言 语言, 这个用法对我们暂不重要。创建完 xml 实例后要注意打开 active 属性 :
xml.active : = true;
这样下面对文件的读写操作才有效。如果没有 xml l xml 的实例, 即要建立 xml 文件 文件, 可以选择在上面一句之后, 对 xml 实例操作, 操作完毕之后加上 : :
xml.savetofile ( 'f :/work/费亚的文件 费亚的文件 /task/xml/lab_xml/country.xml');
"
var rootnode : xmlnode;
rootnode : = xml.createnode ( 'xmlpackage');
XML. DocumentElement : = rootnode;
接着我们创建不同类型的子节点, 前面的实例中的第 9 行的节点比较有代表性 行的节点比较有代表性, 它是一个带有文本的子节点, 同时又带有两个属性节点, 我们来看看它是怎么被创建的 被创建的, 首先创建一个根节点 :
xml.active : = true;
xml.documentElement : = xml.createnode ( 'xmlpacage');
接着我们创建 메모 :
var 노드 : ixmlnode;
노드 : = xml.createnode ( '메모');
xml.documentElement.childnodes.add (노드);
这种创建儿子节点的方法比较好, 当然还可以 :
xml.documentElement.addchild ( 'xmlpacage');
"
node.childnodes.add (xml.createnode ( 'hello! 나는 Yaya!', nttext);
注意 CreateNode ode ode, 我们继续看属性是怎么创建的 :
node.attributeNodes.add (xml.createnode ( 'length', ntattribute));
node.setattribute ( 'length', 16);
node.attributeNodes.add (xml.createnode ( 'color', ntattribute));
node.setattribute ( '색상', $ 0034494b);
最后别忘了保存哦 :
xml.savetofile ( 'f :/work/费亚的文件 费亚的文件 /task/xml/lab_xml/test.xml');
xml.active : = false;
到此我们就结束了创建, 至于添加, 至于添加, 即插入节点, 要插在指定节点后将上面的 add (const node : ixmlnode) 方法换成 삽입 (index : integer; const node : ixmlnode), 其它用法也就一目了然, 不再详述了。
(2))
读取比较简单, 主要是读取子节点的文本和属性值, 方法是比较简单 方法是比较简单, 关键就是要利用 ixmlnodelist 接口来提供的一些属性和方法来循环搜索到指定节点就 OK 了。文本和属性值的Delphi i, 我就讲一种 : nodevalue 属性 属性, 它是 ixmlnode 接口的一个属性 接口的一个属性, 它的值是 olovariant 类型 类型, 意味着我们在 xml 文件里虽然都是存的字符串, 但 Delphi 会帮我们来转换数据格式, 比如有个属性节点叫 노드 :
node.nodevalue : = 16; // 16 是 정수 类型
虽然在 xml l ascii 格式的 16, 但当我们要读取的时候 delphi 还会帮我们换回来的, 只要这样就可以了 : :
var 렌 : 정수;
len : = node.nodevalue;
当然我们要注意的就是, 用这种方法读取的时候最好先查看同一节点的 nodetype 属性 属性, 因为有几种类型的节点避免发生异常, 对照如下 :
Nodetype | nodevalue |
ntattribute ibute | 属性的值 |
ntElement 元素节点 | 如果这个节点没有子节点, 就返回它的 텍스트, 否则有异常 |
nttext 文本节点 | 텍스트 的内容 |
"
Nodetype | Nodename |
ntattribute ibute | 属性的名字 |
ntElement 元素节点 | 节点的名字 |
nttext 文本节点 | '#텍스트' |
读取就完了 读取就完了, 当然我们上面是通过接口的属性来做的 当然我们上面是通过接口的属性来做的, 接口也有方法来完成, 就不说了, 对上面的几个属性都是可读可写的, 对上面的几个属性都是可读可写的 所以修改也基本清楚了。 所以修改也基本清楚了。
(3))
删除主要给出了删除指定节点, 主要是看 ixmlnodelist 接口的几个方法 接口的几个方法, Clear Delete 方法 方法, 其中前一个是全部清空, 后一个是删除指定的子节点, 这个方法是重载的, 可以按名字也可以按顺序号 也可以按顺序号, 即 카운트 属性 属性, 非常方便!
二、控件解析法 :
filename ame xml 样板文件 样板文件, 然后由击控件选择 xml 데이터 바인딩 마법사…把 xml l l, 这里你可以展开每个节点, 编辑每个节点的属性数据类型。单击 다음 到下一个配置页面 到下一个配置页面, 델프 生成了各个节点接口的框架Finsh 单击 单击 单击 单击, 这样 Delphi 将生成一个 xdb 文件和与该 xml 文档结构对应的 xml 接口单元。再以后访问该类 xml 文件时, 只需要参照生成的 xml 接口单元里的方法和属性就能很方便的读取节点 :
var xml : ixmlxmlpackagetype; // 通过向导生成的根接口
시작하다
xml : = loadxmlpacage ( ''f :/work/费亚的文件 费亚的文件 /task/xml/lab_xml/test.xml '); // 这个方法也是生成的接口单元中的。
xml.data.row [1]. 이름; // 比如我要取得 데이터 比如我要取得 2 个 행 中的 이름 属性。
很方便的, 完全可以只要一个这样的接口单元就可以了, 其它的什么都可以不要。接口单元中除了 loadxmlpacage 方法还有 newxmlpacage 方法和 getxmlpacage 方法, 这三个方法是可以用于获得刚开始的 xml实例对象的, 同时这个单元中所有新的接口也是继承 ixmlnode 接口的, 所以你不必担心方法不够用。当然只能访问类似结构的 xml 实例, 其它格式的要再重新创建一个对应的 xml 接口单元才可以。
时间 :
作者 : 费亚