简析Delphi中的XML编程

简析Delphi中的XML编程,第1张

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

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

<学生花名册>

<学生 性别 = 男 >

<姓名>李华

<年龄>

<电话>

<学生 性别 = 男 >

<姓名>张三

<年龄>

<电话>

Input xml文件的第一行是XML的版本说明 属性encoding宣告使用何种字符集建立 默认以Unicode 编码(UTF 或UTF ) 这里用中文GB 码 第二行 <学生花名册>是根元素 下面定义了两个学生元素 学生下面嵌套了三个子元素 是对学生的进一步说明 与之相对应的 我们在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_Node <>nil) do //循环取多个学生 可再多加几个学生信息测试

begin

if (Parent_Node NodeName = 学生 ) then //判断是否为学生结点

begin

Student := TStudent Create//新建一个学生的结构信息

Student sex := Parent_Node Attributes[ 性别 ]//取学生的性别属性

Child_Node := Parent_Node ChildNodes First

//使Child_Node指向该学生的第一个子结点信息

while (Child_Node <>nil) 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 := GB //设置字符集

Root := OutXMLDoc AddChild( 学生花名册 )//建根结点

for i := to List Count 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//最后释放保存临时学生信息的列表

lishixinzhi/Article/program/Delphi/201311/24984

tidhttp应该是被动接受服务器返回的数据,而返回的数据可以使用下面链接的方式获得编码集

http://chinasf.cnblogs.com/archive/2012/01/11/2319811.html


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/7744671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存