亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

delphi中的XML解析控件TXMLDocument的用法

2019-11-18 18:18:33
字體:
來源:轉載
供稿:網友

DelphiTxmlDocument控件的用法

   Delphi中对XML文件的解析做的很好,比直接使用MSMSXML2_TLB中的接口要方便很多,现称述于下面。

   在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解。

1<?xml version="1.0" encoding="gb2312"?> <!--文档版本信息, 注释格式同HTML-->

2<XMLPackage>  

3  <clinetinfo ip=”202.101.100.90” handler=”si” unit=”江苏网商软件”/>

4  <data>

5     <row id=”1” name="太阳" sex=”” age="24" duty="软件工程师"/>

6     <row id=”2” name="月亮" sex=”” age="25" duty="部门经理"/>

7<!--data中包含了元素 row的两个实例,通过属性id予以区分 -->

8  </data>

9    <memo length=”16” color=” $0034494B”>Hello! I am yaya! </memo> <!-- 这个元素中间包含的内容成为Text,而且也含有两个属性 length color 当然也可以没有属性 -- >

10   <Actions acition=”update/insert”/> <!—该元素描述了一动作控制信息-->

11</XMLPackage>

   TXMLDocument控件提供了我们两种常用做法:一、直接用这个类封装的属性和方法来读写XML文件,我把它称为自己解析法;二、用控件提供的XML Data Binding Wizard来创建一个适合用户自己的接口单元,然后按照这个接口单元提供的许多接口来实现对同类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’);

   当然也可以从Internet面板上拖放一个TXMLDocument控件,然后再为FileNameXML属性赋值,比如对象名仍然叫xml(下都不说明都这样默认):

Xml.FileName:= F:/Work/费亚的文件/task/XML/lab_xml/country.xml;

至于它的另一个属性XML是用来直接赋XML语言,这个用法对我们暂不重要。创建完XML实例后要注意打开Active属性:

Xml.active:=true;

   这样下面对文件的读写操作才有效。如果没有XML文件可以用来创建XML的实例,即要建立XML文件,可以选择在上面一句之后,对XML实例操作,操作完毕之后加上:

Xml.SaveToFile(‘F:/Work/费亚的文件/task/XML/lab_xml/country.xml’);

下面就是创建节点了,需要结合上面的XML文件实例来讲述。首先一个XML文件只能有一个根节点,比如文件实例中2行的XMLPackage是这样被创建的:

Var rootnode:XMLNode;

Rootnode:=xml.CreateNode(‘XMLPackage’);

Xml. DocumentElement:=rootnode;

   接着我们创建不同类型的子节点,前面的实例中的第9行的节点比较有代表性,它是一个带有文本的子节点,同时又带有两个属性节点,我们来看看它是怎么被创建的,首先创建一个根节点:

xml.Active:=true;

xml.DocumentElement:=xml.CreateNode('XMLPacage');

接着我们创建memo子节点:

Var node:IXMLNode;

node:=xml.CreateNode('memo');

xml.DocumentElement.ChildNodes.Add(node);

这种创建儿子节点的方法比较好,当然还可以:

xml.DocumentElement.AddChild('XMLPacage');

来创建,建议使用第一种,CreateNode方法的用法是很丰富的,主要看它的第二个参数,上面其实是用了默认参数,下面我再看看怎样创建这个子节点的文本的:

node.ChildNodes.Add(xml.CreateNode('Hello! I am 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 Node: IXMLNode)方法换成Insert(Index: Integer; const Node: IXMLNode),其它用法也就一目了然,不再详述了。

2)读取和修改

读取比较简单,主要是读取子节点的文本和属性值,方法是比较简单,关键就是要利用IXMLNodeList接口来提供的一些属性和方法来循环搜索到指定节点就OK了。文本和属性值的读取方法在delphi中提供的方法有很多,我就讲一种:NodeValue属性,它是IXMLNode接口的一个属性,它的值是OleVariant类型,意味着我们在XML文件里虽然都是存的字符串,但delphi会帮我们来转换数据格式,比如有个属性节点叫node

Node.NodeValue:=16;//16integer类型

虽然在XML文件中保存的是ASCII格式的16,但当我们要读取的时候delphi还会帮我们换回来的,只要这样就可以了:

Var len:integer;

Len:=node.NodeValue;

当然我们要注意的就是,用这种方法读取的时候最好先查看同一节点的NodeType属性,因为有几种类型的节点避免发生异常,对照如下:

NodeType

NodeValue

ntAttribute 属性节点

属性的值

ntElement元素节点

如果这个节点没有子节点,就返回它的TEXT,否则有异常

ntText文本节点

TEXT的内容

上面讲的都是读和写节点的值,有时候也要读和写节点名,就要访问NodeName属性,使用方法大概相同,也要结合NodeValue来使用:

NodeType

NodeName

ntAttribute 属性节点

属性的名字

ntElement元素节点

节点的名字

ntText文本节点

#text

   读取就完了,当然我们上面是通过接口的属性来做的,接口也有方法来完成,就不说了,对上面的几个属性都是可读可写的,所以修改也基本清楚了。

3)删除

   删除主要给出了删除指定节点,主要是看IXMLNodeList接口的几个方法,ClearDelete方法,其中前一个是全部清空,后一个是删除指定的子节点,这个方法是重载的,可以按名字也可以按顺序号,即Count属性,非常方便!

 

二、控件解析法:

   为控件的FileName属性选择一个XML样板文件,然后由击控件选择XML Data Binding Wizard…,在这个向导中间会创建一个xdb文件。在弹出的向导中, 第一页中, 可以看到Delphi已经帮你把XML文件中的各个节点对应到了接口,这里你可以展开每个节点,编辑每个节点的属性数据类型。单击Next到下一个配置页面,这里你可以看到Delphi生成了各个节点接口的框架代码。 单击 Finsh 完成向导, 这样Delphi将生成一个xdb 文件和与该XML文档结构对应的XML接口单元。再以后访问该类XML文件时,只需要参照生成的XML接口单元里的方法和属性就能很方便的读取节点:

var xml :IXMLXMLPackageType;  // 通过向导生成的根接口

begin

     xml := LoadXMLPacage ( ''F:/Work/费亚的文件/task/XML/lab_xml/test.xml ' ); // 这个方法也是生成的接口单元中的。

     xml.Data.Row[1].name;  // 比如我要取得data下的第2row 中的name属性。

很方便的,完全可以只要一个这样的接口单元就可以了,其它的什么都可以不要。接口单元中除了LoadXMLPacage方法还有NewXMLPacage方法和GetXMLPacage方法,这三个方法是可以用于获得刚开始的XML实例对象的,同时这个单元中所有新的接口也是继承IXMLNode接口的,所以你不必担心方法不够用。当然只能访问类似结构的XML实例,其它格式的要再重新创建一个对应的XML接口单元才可以。

                                                              时间:2004-9-3

                                                              作者:费亚

 


上一篇:delphi中將UCS2編碼的字符串轉化為GB2312編碼的簡單方法

下一篇:如何在Delphi中使用正則表達式

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本一本久久a久久精品综合小说| 日本不卡视频在线播放| 欧美午夜宅男影院在线观看| 国产不卡av在线| 中文字幕日韩在线播放| 成人激情黄色网| 亚洲第一福利网站| 国产一区二区黑人欧美xxxx| 久久久久久综合网天天| 91成人天堂久久成人| 欧美在线视频免费| 中文字幕日韩在线视频| 午夜精品一区二区三区视频免费看| 亚洲毛片在线观看| 日本久久久a级免费| 精品国偷自产在线视频99| 亚洲精品999| 精品av在线播放| 91精品久久久久久久久久久| 久久久久久一区二区三区| 亚洲自拍偷拍视频| 亚洲xxxx妇黄裸体| 一本色道久久综合亚洲精品小说| 影音先锋欧美精品| 海角国产乱辈乱精品视频| 亚洲丝袜在线视频| 综合国产在线视频| 精品久久久999| 国产精品影院在线观看| 国产成人精品日本亚洲| 国产精品6699| 一本久久综合亚洲鲁鲁| 亚洲国产精品一区二区三区| 亚洲国产精品99久久| 欧美福利视频在线观看| 国产在线高清精品| 欧美大片大片在线播放| 91人成网站www| 2018日韩中文字幕| 日韩欧美高清视频| 国产v综合v亚洲欧美久久| 精品国产一区av| 国产精品美女主播在线观看纯欲| 欧美大片在线看免费观看| 欧美性高潮在线| 一区二区三区视频在线| 欧美黄色三级网站| 欧美中文在线免费| 国产精品对白刺激| 亚洲国产精品一区二区三区| 一区二区三区视频免费在线观看| 国产精品一香蕉国产线看观看| 97精品国产91久久久久久| 亚洲一区二区三区在线免费观看| 亚洲xxxxx性| 正在播放国产一区| 欧美激情免费看| 久久精品最新地址| 日本视频久久久| 国产精品国产三级国产aⅴ浪潮| 国产精品久久久久久久久久| 久久91亚洲精品中文字幕奶水| 日本久久久久久久| 国产精品都在这里| 亚洲春色另类小说| 精品国产999| 8050国产精品久久久久久| 日韩成人激情视频| 国模精品一区二区三区色天香| 国产精品日韩欧美综合| 51久久精品夜色国产麻豆| 黑人巨大精品欧美一区二区一视频| 国产午夜一区二区| 91精品国产高清| 欧美猛交ⅹxxx乱大交视频| 欧美限制级电影在线观看| 欧美精品日韩三级| 91久久精品视频| 欧美日韩国产限制| 九九热这里只有在线精品视| 欧美电影免费在线观看| 久久网福利资源网站| 国内免费精品永久在线视频| 亚洲欧洲美洲在线综合| 91精品国产乱码久久久久久蜜臀| 亚洲欧洲xxxx| 欧美中文字幕视频| 久久夜精品香蕉| 在线a欧美视频| 久久99久国产精品黄毛片入口| 亚洲激情视频在线播放| 中文字幕日韩有码| 精品女同一区二区三区在线播放| 91po在线观看91精品国产性色| 欧美性xxxx极品hd满灌| 亚洲日韩欧美视频| 国产999精品久久久| 国产精品免费在线免费| 亚洲福利视频二区| 狠狠躁夜夜躁久久躁别揉| 日韩激情av在线免费观看| 国产精品99蜜臀久久不卡二区| 亚洲欧美一区二区三区情侣bbw| 国产精品极品美女在线观看免费| 欧美乱妇40p| 欧美第一黄网免费网站| 91精品视频在线免费观看| 久久人人爽人人爽人人片av高清| 欧美激情中文字幕乱码免费| 高清一区二区三区四区五区| 91精品视频在线播放| 在线看片第一页欧美| 欧美激情视频在线免费观看 欧美视频免费一| 欧美大片va欧美在线播放| 精品免费在线视频| 国产欧美 在线欧美| 国产成人激情小视频| 国产精品视频自在线| 国产精品中文字幕久久久| 欧美视频在线观看免费| 欧美老女人xx| 高清欧美性猛交xxxx黑人猛交| 亚洲亚裔videos黑人hd| 久久国产一区二区三区| 欧美亚洲午夜视频在线观看| 一区二区三区日韩在线| 国产91在线高潮白浆在线观看| 亚洲天堂免费在线| 欧美又大又粗又长| 欧美中文字幕在线| 日韩精品中文在线观看| 日韩经典中文字幕| 欧美电影免费播放| 91色视频在线导航| 91亚洲精品在线| 国产精品v片在线观看不卡| 久久免费视频在线观看| 欧美电影电视剧在线观看| 日韩在线资源网| 日韩欧美在线免费观看| 国产成+人+综合+亚洲欧美丁香花| 国产丝袜精品第一页| 久久久综合av| 国产一区二区香蕉| 欧美专区日韩视频| 97视频com| 亚洲乱码国产乱码精品精| 日产日韩在线亚洲欧美| 欧美激情一级欧美精品| 国精产品一区一区三区有限在线| 欧美黄色片免费观看| 亚洲欧洲日产国码av系列天堂| 欧美激情精品久久久久久免费印度| 国产精品久久久久久搜索| 91精品久久久久久久久久久| 久久久久久亚洲精品不卡| 国产一区二区在线免费视频| 久久久国产成人精品| 91地址最新发布| 2019中文字幕在线观看| 国产精品免费观看在线| 亚洲欧美制服第一页| 欧美大片免费观看在线观看网站推荐| 在线视频免费一区二区|