Delphi中利用TXMLDocument组件读取XML生成TreeView函数备忘

一、将TreeView结构保存为XML文件函数

procedure TmainForm.Tree2XML(tree:TTreeView);

var

 tn:TTreeNode;

 XMLDoc:TXMLDocument;

 iNode:IXMLNode;

 

 procedure ProcessTreeItem(tn:TTreeNode;iNode:IXMLNode);

  var

 cNode:IXMLNode;

 begin

   if tn=nil then Exit;

   cNode:=iNode.AddChild('item');

   cNode.Attributes['text']:=tn.Text;

   cNode.Attributes['imageIndex']:=tn.ImageIndex;

   cNode.Attributes['selectedIndex']:=tn.SelectedIndex;

 

   //child nodes

   tn:=tn.getFirstChild;

    whiletn<>nil do

   begin

     ProcessTreeItem(tn,cNode);

     tn:=tn.getNextSibling;

   end;

 end; (*processTreeItem*)

 

begin

 XMLDoc:=TXMLDocument.Create(nil);

 XMLDoc.Active:=True;

 iNode:=XMLDoc.AddChild('tree2xml');

 iNode.Attributes['app']:=ParamStr(0);

 

 tn:=tree.TopItem;

 while tn<>nil do

 begin

   ProcessTreeItem(tn,iNode);

 

   tn:=tn.getNextSibling;

 end;

 XMLDoc.Encoding:='utf-8';

 XMLDoc.Version:='1.0';

 

 XMLDoc.SaveToFile(ChangeFileExt(ParamStr(0),'.XML'));

 XMLDoc:=nil;

end;

 

二、从XML生成Treeview

 

procedure TmainForm.XML2Tree(tree:TTreeView; XMLDoc: TXMLDocument);

var

 iNode:IXMLNode;

 

 procedure ProcessNode(Node:IXMLNode;tn:TTreeNode);

  var

   cNode:IXMLNode;

 begin

   if Node=nil then  Exit;

   with Node do

   begin

     tn:=tree.Items.AddChild(tn,Attributes['text']);

     tn.ImageIndex:=Integer(Attributes['imageIndex']);

     tn.SelectedIndex:=Integer(Attributes['selectedIndex']);

   end;

 

   cNode:=Node.ChildNodes.First;

   while cNode<>nil do

   begin

     ProcessNode(cNode,tn);

     cNode:=cNode.NextSibling;

   end;

 end;(*processNode*)

begin

 tree.Items.Clear;

 XMLDoc.FileName:=ChangeFileExt(ParamStr(0),'.XML');

 XMLDoc.Active:=True;

 

 iNode:=XMLDoc.DocumentElement.ChildNodes.First;

 

 while iNode<>nil do

 begin

    ProcessNode(iNode,nil);

    iNode:=iNode.NextSibling;

 end;

 XMLDoc.Active:=False;

end;




“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

飞行的鱼

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值