![]() |
Suche geeignete XML-Struktur für TreeView
Hi,
ich speichere Daten in einer TreeView und möchte dem Benutzer die Möglichkeit geben, in der TreeView Ordner und Unterordner anzulegen. Meine Frage: Wie kann ich eine solche Struktur aufbauen, damit man die Daten gut speichern und wieder laden kann? Bisher habe ich folgende Struktur, aber diese lässt sich nicht so super eindeutig nachvollziehen finde ich:
XML-Code:
Die Eigenschaft Expanded gibt an, ob der Knoten beim Öffnen der Form bereits geöffnet dargestellt werden soll oder nicht.
<?xml version="1.0" encoding="ISO-8859-1"?>
<Daten> <Ordner Name="Autos" Expanded="True" Icon="15"> <Ordner Name="Meine Autos" SubfolderOf="Autos" Icon="16"> <Ordner Name="Andere Autos" SubfolderOf="Autos" Icon="17"> </Daten> SubfolderOf gibt den Parent-Ordner an. Ich finde die Struktur irgendwie nicht so gelungen, es stört mich was dran, weiss aber nicht genau was. Vielleicht hat jemand ja einen besseren Vorschlag. Eine Schwierigkeit hier ist z.B. dass beim Auslesen das Expanded nicht gleich gesetzt werden kann, da es noch keine Unterordner besitzt. Erst beim Auslesen von "Meine Autos" und "Andere Autos"...d.h. ich müsste die Datei zwei Mal durchparsen, was wieder auf die Performance geht... Wie gesagt, vielleicht hat ja jemand noch eine bessere Idee. Wäre super. |
Re: Suche geeignete XML-Struktur für TreeView
Code:
Bau es doch auch wieder als Baum auf.
<Daten>
<Ordner Name="Autos" Expanded="True" Icon="15"> <Ordner Name="Meine Autos" Icon="16" /> <Ordner Name="Andere Autos" Icon="17" /> </Ordner> </Daten> Erst den Parentknoten einfügen, dann alle Childs auslesen und zum Schluss den Parentknoten expandieren. |
Re: Suche geeignete XML-Struktur für TreeView
Okay, das sieht ja schonmal gut aus. Dann müsste ich die Struktur aber rekursiv durchgehen und ausgeben, oder? Habe ich schonmal gelesen, aber ich finde es gerade hier im Forum nicht mehr (finde schon diverse Sachen, aber keine, die ich verstehe *g*). Gibt´s vielleicht Tutorials zum rekursiven Aufruf von XML-Tags bzw. TreeNodes?
|
Re: Suche geeignete XML-Struktur für TreeView
Hallo Yheeky,
ich habe mal ein Beispiel für dich erstellt. Du braucht ein Formular mit einer TTreeView-Komponente drauf und halt die XML-Lib deiner Wahl. Ich benutze NativeXml (von simdesign.nl), aber vom Prinzip her funktioniert das mit jeder anderen auch.
Delphi-Quellcode:
Hoffe, du kommst damit weiter.procedure TfrmMain.Xml2Tree(const aFilename: string; aTreeView: TTreeView); procedure InterateTree(aXmlNode: TXmlNode; aParent: TTreeNode); var i: integer; NewTreeNode: TTreeNode; begin for i:= 0 to aXmlNode.NodeCount-1 do begin NewTreeNode:= aTreeView.Items.AddChild(aParent, aXmlNode.Nodes[i].AttributeByName['Name']); { hier beginnt die Rekursion, sie übergibt den gerade erstellten Knoten zusammen mit dem aktuellen Knoten der XML-Datei und führt die Prozedur nochmals aus. } InterateTree(aXmlNode.Nodes[i], NewTreeNode); end; end; var fXmlDoc: TNativeXml; begin aTreeView.Items.Clear; aTreeView.Items.BeginUpdate; fXmlDoc:= TNativeXml.Create; try fXmlDoc.LoadFromFile(aFilename); { Startpunkt der eigentlichen Einlese-Prozedur } InterateTree(fXmlDoc.Root, nil); finally fXmlDoc.Free; end; aTreeView.Items.EndUpdate end; procedure TfrmMain.FormCreate(Sender: TObject); begin fPath:= ExtractFilePath(Application.ExeName); end; procedure TfrmMain.btnLoadFromXmlClick(Sender: TObject); begin If FileExists(fPath + FileDemoTree) then Xml2Tree(fPath + FileDemoTree, TreeView1); end; Gruß Jürgen |
Re: Suche geeignete XML-Struktur für TreeView
Hallo Christian,
ich erinnere mich an einen Thread mit vergleichbarem Thema: ![]() Freundliche Grüße |
Re: Suche geeignete XML-Struktur für TreeView
@Pfoto: Super, danke! Das sieht sehr gut aus. Hab das jetzt auch gerade auf meine Komponente (JVSimpleXML) umgestellt und es funktioniert prächtig!
Jetzt habe ich allerdings ein neues Problem - ich poste es gleich in einen neuen Thread. Danke bis hierhin! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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 by Thomas Breitkreuz