function TForm1.TreeToXml(mXMLDocument:IXMLDocument;mTreeView:TTreeNode):Boolean;
  procedure pTreeToXML(mXMLNode:IXMLNode;mTreeNode:TTreeNode);
  var
   i,j:integer;
   vXMLNode:IXMLNode;
  begin
   mTreeNode:=mTreeNode.getFirstChild;
   while mTreeNode<>nil do
   begin
    mXMLNode.AddChild(mTreeNode.Text);
 
    If mTreeNode.HasChildren then
   {  pTreeToXML(vXMLNode,mTreeNode); ///这段不知道怎么写,请大家帮忙
    end;}    If mTreeNode.getNextSibling<>nil then
     mTreeNode:=mTreeNode.getNextSibling
    else
     Exit;
   end;
  end;
var
 i:integer;
// Node:TTreeNode;
begin
 if not (Assigned(mXMLDocument)and Assigned(TreeView1))then
  exit;
 while mTreeView<>nil do
 begin
  CurNode1:=xmlNode.AddChild(mTreeView.Text);
  if mTreeView.HasChildren then
   pTreeToXML(CurNode1,mTreeView);  if mTreeView.getNextSibling<>nil then
   mTreeView:=mTreeView.getNextSibling
  else
   exit;
 end;
end;procedure TForm1.Button5Click(Sender: TObject);
var
 TN:TTreeNode;
begin
 TN:=TreeView1.Selected;
 xmlNode:=XMLDocument2.AddChild('CRtprj');
 XMLDocument2.Encoding:='GB2312';
 TreeToXml(XMLDocument2,TN);
 XMLDocument2.SaveToFile('c:\11.xml');
end;

解决方案 »

  1.   

    <?xml version="1.0" encoding="gb2312" ?> 
    - <Menu>
    - <MenuItem Caption="文件上传" Link="#">
      <SubMenuItem Caption="上传报价文件" Link="##" /> 
      <SubMenuItem Caption="上传协议文件" Link="##" /> 
      <SubMenuItem Caption="上传价格反馈" Link="##" /> 
      </MenuItem>
    - <MenuItem Caption="下载文件" Link="#">
      <SubMenuItem Caption="下载协议" Link="##" /> 
      <SubMenuItem Caption="下载便函" Link="##" /> 
      <SubMenuItem Caption="下载标准物料号" Link="##" /> 
      </MenuItem>
    - <MenuItem Caption="其他下载" Link="#">
      <SubMenuItem Caption="下载集团单位清单" Link="##" /> 
      <SubMenuItem Caption="下载上下级单位差异" Link="##" /> 
      <SubMenuItem Caption="下载期初" Link="##" /> 
      </MenuItem>
      </Menu>var
      TXMLMenuItem:TTreeNode;
      IXMLMenu:IXMLNode;
      IXMLMenuItem:IXMLNode;
      IXMLSubMenuItem:IXMLNode;  
    begin
      XMLTreeView.Items.Clear;  InXMLDoc.LoadFromFile(OpenDialog1.FileName);
      IXMLMenu:=InXMLDoc.DocumentElement;            
      IXMLMenuItem:=IXMLMenu.ChildNodes.First;  While (IXMLMenuItem<>nil) do
      begin
        TXMLMenuItem:=XMLTreeView.Items.AddChild(nil,IXMLMenuItem.Attributes['Caption']);
        IXMLSubMenuItem:=IXMLMenuItem.ChildNodes.First;    while (IXMLSubMenuItem<>nil) do
        begin
          if IXMLSubMenuItem.NodeName='SubMenuItem' then
            XMLTreeView.Items.AddChild(TXMLMenuItem,IXMLSubMenuItem.Attributes['Caption']);
          IXMLSubMenuItem:=IXMLSubMenuItem.NextSibling;
        end;
        
        IXMLMenuItem:=IXMLMenuItem.NextSibling;
      end;大概就是这个意思,我做了一个菜单编辑的东西,就是菜单的内容从XML读,允许保存回去,我截取了一下段,你看看有没有帮助,
    这就是个大概的意思,希望对你有帮助。
      

  2.   

    to  fayeflash(我爱阿菲) ( ) 将数据读入treeview后,修改了后,最后是如何保存到xml中的?
      

  3.   

    function XMLToTree(mXMLDocment: TXMLDocument; mTreeView: TTreeView): Boolean;
      procedure pXMLToTree(mXMLNode: IXMLNode; mTreeNode: TTreeNode);
      var
        I: Integer;
        vTreeNode: TTreeNode;
      begin
        if SameText(mXMLNode.NodeName, '#text') then
          vTreeNode := mTreeView.Items.AddChild(mTreeNode, mXMLNode.NodeValue)
        else vTreeNode := mTreeView.Items.AddChild(mTreeNode, mXMLNode.NodeName);
        for I := 0 to mXMLNode.ChildNodes.Count - 1 do
          pXMLToTree(mXMLNode.ChildNodes[I], vTreeNode);
      end;
    var
      I: Integer;
    begin
      Result := False;
      if not (Assigned(mXMLDocment) and Assigned(mTreeView)) then Exit;
      mTreeView.Items.BeginUpdate;
      try
        mTreeView.Items.Clear;
        for I := 0 to mXMLDocment.ChildNodes.Count - 1 do
          pXMLToTree(mXMLDocment.ChildNodes[I], nil);
      finally
        mTreeView.Items.EndUpdate;
      end;
      Result := True;
    end; { XMLToTree }procedure TForm1.Button1Click(Sender: TObject);
    begin
      XMLDocument1.LoadFromFile('c:\temp\temp.xml');
      XMLToTree(XMLDocument1, TreeView1);
    end;