Einzelnen Beitrag anzeigen

Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#4

Re: [XML] TreeView Daten in XML-File schreiben

  Alt 30. Okt 2006, 12:05
so habs jetzt verschönert und für mich angepasst.
außerdem ist die Procedure fehlerhaft:
Delphi-Quellcode:
procedure Tree2XML(tree: TTreeView);
var
  tn : TTreeNode;
  XMLDoc : TXMLDocument;
  iNode : IXMLNode;

  procedure ProcessTreeItem( //<-- Des ganze mit der Procedure ist total unschön (IMHO)
        tn : TTreeNode;
        iNode : IXMLNode);
  var
    cNode : IXMLNode;
  begin
    if (tn = nil) then Exit; //<-- Total unnütz kann wegen der while schleife niemals auftreten
    cNode := iNode.AddChild('item');
    cNode.Attributes['text'] := tn.Text;
    cNode.Attributes['imageIndex'] := tn.ImageIndex;
    cNode.Attributes['stateIndex'] := tn.StateIndex;

    //child nodes
    tn := tn.getFirstChild;
    while tn <> 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.SaveToFile(ChangeFileExt(ParamStr(0),'.XML'));
  //XMLDoc.Free; <-- FEHLT
  XMLDoc := nil;
end; (* Tree2XML *)
Naja sie funktioniert ... aber für mich überhaupt nicht akzeptabel, deshalb hab ich es so geschrieben:
Delphi-Quellcode:
procedure XMLLoadFile; // <-- De wird auch bei XMLoadFile gebraucht
begin
  XMLDocument := TXMLDocument.Create(frmHaupt);
  XMLDocument.NodeIndentStr := '<2 Leerzeichen>';
  XMLDocument.FileName := ExtractFilePath(ParamStr(0))+cXMLFileClients;
  if not(FileExists(ExtractFilePath(ParamStr(0))+cXMLFileClients)) then
  begin
    XMLDocument.LoadFromXML('<?xml version="1.0"?><'+cXMLRootNodeName+'></'+cXMLRootNodeName+'>');
    XMLDocument.SaveToFile;
  end;
  try
    XMLDocument.Active := true;
  except
    ShowMessage('XML Fehler: Die Datei "'+ExtractFilePath(ParamStr(0))+cXMLFileClients+'" ist fehlerhaft.');
    Halt;
  end;
end;

procedure XMLSaveFile(TreeView : TTreeView; XMLNode : IXMLNode; TreeViewParent : TTreeNode);
var
  TempNode : IXMLNode;
  TempTreeNode : TTreeNode;
begin
  if TreeViewParent = nil then
  begin
    XMLLoadFile;
    XMLSaveFile(TreeView, XMLDocument.DocumentElement, TreeView.TopItem);
    XMLDocument.SaveToFile(ExtractFilePath(ParamStr(0))+cXMLFileClients);
    XMLDocument.Active := false;
    XMLDocument.Free;
    exit;
  end;
  TempTreeNode := TreeViewParent.getFirstChild;
  while TempTreeNode <> nil do
  begin
    TempNode := XMLNode.AddChild(TempTreeNode.Text);
    TempNode.Attributes['type'] := [..];
    XMLSaveFile(TreeView, TempNode, TempTreeNode);
    TempTreeNode := TempTreeNode.getNextSibling;
  end;
end;
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat