![]() |
[XML] TreeView Daten in XML-File schreiben
Hi DPler
Ich bin grad bei meinem ersten Projekt mit XML. Aber ich glaub XML ist zu schwierig für mich :stupid: Ich hab es zwar geschafft (nach vielen stunden arbeit) die Daten aus der XML in meine TreeView reinzuschreiben. Nun wird im programm änderungen in der TreeView gemacht und deshalb will ich logischerweiße beim Programmende die daten von der TreeView wieder in die XML schreiben. So nun hab ich mir schon mal gedacht das ich einfach immer die XML lösche und sie dann komplett neu anleg. Aber leider hab ich einfach nichts brauchbares zustande gebracht. Hier mein Code zum auslesen aus der XML:
Delphi-Quellcode:
procedure XMLLoadXMLFile(TreeView : TTreeView; XMLNode : IXMLNode; TreeViewParent : TTreeNode);
var TempTreeNode : TTreeNode; begin if TreeViewParent = nil then begin XMLDocument.Active := true; TreeView.Items.Clear; TreeView.Items.BeginUpdate; TempTreeNode := TreeView.Items.Add(nil, 'Arbeitsplatz'); TempTreeNode.ImageIndex := 0; TempTreeNode.SelectedIndex := 0; XMLLoadXMLFile(TreeView, XMLDocument.DocumentElement.ChildNodes.First, TempTreeNode); TreeView.Items.EndUpdate; XMLDocument.Active := false; exit; end; while XMLNode <> nil do begin TempTreeNode := TreeView.Items.AddChild(TreeViewParent, XMLNode.NodeName); TempTreeNode.ImageIndex := 1; TempTreeNode.SelectedIndex := 1; XMLLoadXMLFile(TreeView, XMLNode.ChildNodes.First, TempTreeNode); XMLNode := XMLNode.NextSibling; end; end; |
Re: [XML] TreeView Daten in XML-File schreiben
|
Re: [XML] TreeView Daten in XML-File schreiben
danke ich versuche es mal für mich anzupassen
|
Re: [XML] TreeView Daten in XML-File schreiben
so habs jetzt verschönert und für mich angepasst.
außerdem ist die Procedure fehlerhaft:
Delphi-Quellcode:
Naja sie funktioniert ... aber für mich überhaupt nicht akzeptabel, deshalb hab ich es so geschrieben:
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 *)
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz