简析Delphi中的XML编程

转载 2012年01月13日 17:04:08

======================================================
注:本文源代码点此下载
======================================================

简析delphi中的xml编程 2007-05-30 20:41

分类:delphi 字号: 大大  中中  小小 xml(extensible markup language可扩展标志语言)在近几年的信息类杂志、网站上可谓是最抢眼的一词。大大小小的信息产品都争相和它搭上关系,唯恐赶不及这辆快车。有着良好口碑的宝蓝 (borland)系列开发平台也不例外,从6.0版开始就集成了xml组件包,因其使用msxmldom解析器,相比于此前广泛应用的xmlparser解析器,msxmldom更显规范、中文兼容性更好(元素名、属性名均支持中文),很受开发者青睐。为帮助初学者快速掌握delphi中的xml编程,笔者特写此文,以供交流。

笔者通过一个读写xml文件的实例来说明xml编程的各个步骤,只需读者有结点、元素、属性的基本概念就能容易的理解本文。笔者所要读入的xml文件结构如下所示,命名为input.xml。

李华

14

6287555

张三

16

8273425

input.xml文件的第一行是xml的版本说明,属性encoding宣告使用何种字符集建立,默认以unicode 编码(utf-8 或utf-16),这里用中文gb2312码。第二行““是根元素。下面定义了两个学生元素,学生下面嵌套了三个子元素,是对学生的进一步说明。与之相对应的,我们在delphi中定义如下的学生数据结构,"//"后面的文字是对变量或语句的说明,下同。

tstudent = class {学生}

sex : string; //学生性别

name : string; //学生姓名

age : integer; //学生年龄

phone: string; //电话号码

end;

为了读写,我们需要放置两个txmldocument控件,在delphi vcl面板的internet标签页里那个标有xml字样的控件就是,当然此控件也可以动态创建,但需要包含必要的文件,这里为简单起见,我们直接放置在窗体上,分别命名为inxmldoc和outxmldoc,inxmldoc用于调入input.xml文件,outxmldoc用于暂存输出到output.xml的文档。

在窗体上放个按钮,我们把测试代码直接放置在按钮的单击事件里。先定义几个变量,用来保存临时信息,如下所示:

root : ixmlnode; //指向xml根结点

parent_node: ixmlnode; //指向学生结点

child_node : ixmlnode; //指向学生的子结点

student : tstudent; //存单个学生信息

list : tlist; //存学生列表

i : integer; //循环变量

我们先来读入xml文件,代码如下:

list := tlist.create; //初始化列表

inxmldoc.loadfromfile('input.xml'); //调入input.xml文件

root := inxmldoc.documentelement; //取xml文件的根结点,即“”

parent_node := root.childnodes.first; //使parent_node指向学生结点

while (parent_nodenil) do //循环取学生的各个子各点

begin

if (child_node.nodename = '姓名') then //判断是否为姓名结点

student.name := child_node.text //取姓名结点的值,取于name字段中

else if (child_node.nodename = '年龄') then //此行起后四行与前两行类似

student.age := strtoint(child_node.text)

else if (child_node.nodename = '电话') then

student.phone := child_node.text;

child_node := child_node.nextsibling; //顺序取下一个学生的子结点信息

end;

list.add(student); //把一个学生信息加入列表

end;

parent_node := parent_node.nextsibling; //顺序取下一个学生信息

end; 

到这儿,所有的学生信息都已存到list列表里面了,读者可以跟踪代码测试。

下面我们把list里的临时学生信息存到output.xml文件里,代码如下:

outxmldoc.active := true; //激活outxmldoc,自动初始化空的xml文档

outxmldoc.encoding := 'gb2312'; //设置字符集

root := outxmldoc.addchild('学生花名册'); //建根结点

for i := 0 to list.count - 1 do //循环取各个学生信息

begin

student := list.items[i]; //顺序取一个学生信息

if (student <> nil) then

begin

parent_node := root.addchild('学生'); //根结点后添加一个学生结点

parent_node.attributes['性别'] := student.sex; //给学生结点设置性别属性

child_node := parent_node.addchild('姓名'); //学生结点后添加一个姓名结点

child_node.text := student.name; //设置姓名的文本值

child_node := parent_node.addchild('年龄'); //此行起后四行与前两行类似

child_node.text := inttostr(student.age);

child_node := parent_node.addchild('电话');

child_node.text := student.phone;

end;

end;

outxmldoc.savetofile('output.xml'); //把组织好的xml文档存于output.xml文件中

outxmldoc.active := false; //钝化(关闭)outxmldoc

list.free; //最后释放保存临时学生信息的列表

好了,看看input.xml和output.xml内容是不是一样。是不是很简单呢?其实在c++ builder也有相同的组件,只需将pascal语法转换成c++语法,上面的代码就完全可以用了。

technorati: c#, xml

technorati 标签: xml


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/

简析Delphi中的XML编程

XML(eXtensible Markup Language可扩展标志语言)在近几年的信息类杂志、网站上可谓是最抢眼的一词。大大小小的信息产品都争相和它搭上关系,唯恐赶不及这辆快车。有着良好口碑的宝蓝...
  • CnEve
  • CnEve
  • 2005年04月22日 04:17
  • 1190

delphi下使用indy进件socket通信的简单实例介绍

      很久没有专门用过delphi 了,大概有二三年了吧,最近接手一与银行有关的项目,对方银行使用的是unix操作系统,用socket与项目程序进行通信。而这边项目肯定是要在windows下跑的...
  • hui717
  • hui717
  • 2010年07月30日 22:22
  • 9129

Delphi与XML

////////////////////////////////////////////////////////////////////////创建IXMLDOMDocument对象的三种方法:(1)...
  • LuckyJan
  • LuckyJan
  • 2003年06月05日 09:09
  • 2825

HttpUtils解析xml数据

public class MainActivity extends Activity implements IXListViewListener {     private HttpUtils ...
  • LG18611684134
  • LG18611684134
  • 2016年06月01日 11:28
  • 282

使用Delphi解析XML 文档

使用Delphi解析XML 文档[ 2005-08-24 13:17:23 | 作者: cyberfan ] 字体大小: 大 | 中 | 小 对于XML的解析主要有 DOM(文档对象模型) 和SAX(...
  • pgnet
  • pgnet
  • 2008年11月06日 15:30
  • 8010

基本DELPHI中XML编程--简单节点增删改查

XML文档简单读写方法CST 2005-07-08最近参加一个项目需要写XML,因此我开始学习XML在delphi中的编程方法,我将我STEP BY STEP的入门过程记录下来,希望经验丰富的前辈能给...
  • mrtechno
  • mrtechno
  • 2005年07月16日 00:16
  • 5183

Delphi中关于读取XML内容

XME内容为:   - -             用TXMLDocument来解析.不过因为的Item因为是一个集合,所以只能循环一个一个读,有点...
  • beyondqd
  • beyondqd
  • 2011年08月26日 16:54
  • 2236

简析Java开发中的XML编程

 XML作为全球通用的结构化语言,越来越受人们青睐,各种开发平台(比如Microsoft Studio系列、Oracle系列、Inprise Borland系列等)也都把支持XML开发作为宣传口号之一...
  • shaobotao
  • shaobotao
  • 2004年11月03日 03:27
  • 1487

简析JAVA的XML编程

 
  • wxexplorer
  • wxexplorer
  • 2006年12月30日 06:56
  • 538

简析JAVA中的XML编程

笔者通过介绍关于“学生花名册”的XML文件实例来介绍JAVA中的XML读写操作。文件结构如下所示,把此文件命名为Input.xml,如果您还对XML结构感到比较陌生,建议先看看上一文中关于XML文件的...
  • goldbox
  • goldbox
  • 2007年01月29日 16:08
  • 458
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简析Delphi中的XML编程
举报原因:
原因补充:

(最多只允许输入30个字)