Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Suche geeignete XML-Struktur für TreeView (https://www.delphipraxis.net/119271-suche-geeignete-xml-struktur-fuer-treeview.html)

Yheeky 23. Aug 2008 14:08


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:
<?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>
Die Eigenschaft Expanded gibt an, ob der Knoten beim Öffnen der Form bereits geöffnet dargestellt werden soll oder nicht.
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.

Die Muhkuh 23. Aug 2008 14:15

Re: Suche geeignete XML-Struktur für TreeView
 
Code:
<Daten>
  <Ordner Name="Autos" Expanded="True" Icon="15">
    <Ordner Name="Meine Autos" Icon="16" />
    <Ordner Name="Andere Autos" Icon="17" />
  </Ordner>
</Daten>
Bau es doch auch wieder als Baum auf.

Erst den Parentknoten einfügen, dann alle Childs auslesen und zum Schluss den Parentknoten expandieren.

Yheeky 23. Aug 2008 14:58

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?

Pfoto 23. Aug 2008 16:01

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:


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;
Hoffe, du kommst damit weiter.


Gruß

Jürgen

marabu 23. Aug 2008 16:22

Re: Suche geeignete XML-Struktur für TreeView
 
Hallo Christian,

ich erinnere mich an einen Thread mit vergleichbarem Thema: klick

Freundliche Grüße

Yheeky 23. Aug 2008 20:20

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