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;




猜你喜欢

转载自blog.csdn.net/ymsunshine/article/details/7734764