一、将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;