科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件简析Delphi中的XML编程

简析Delphi中的XML编程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

通过一个读写XML文件的实例来说明XML编程的各个步骤

作者:佚名 来源:论坛 2007年11月1日

关键字:

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

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 := '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++语法,上面的代码就完全可以用了。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章