AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Suche geeignete XML-Struktur für TreeView
Thema durchsuchen
Ansicht
Themen-Optionen

Suche geeignete XML-Struktur für TreeView

Ein Thema von Yheeky · begonnen am 23. Aug 2008 · letzter Beitrag vom 23. Aug 2008
Antwort Antwort
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Suche geeignete XML-Struktur für TreeView

  Alt 23. Aug 2008, 13:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Suche geeignete XML-Struktur für TreeView

  Alt 23. Aug 2008, 13:15
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.
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#3

Re: Suche geeignete XML-Struktur für TreeView

  Alt 23. Aug 2008, 13:58
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?
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Suche geeignete XML-Struktur für TreeView

  Alt 23. Aug 2008, 15:01
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
Jürgen Höfs
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Suche geeignete XML-Struktur für TreeView

  Alt 23. Aug 2008, 15:22
Hallo Christian,

ich erinnere mich an einen Thread mit vergleichbarem Thema: klick

Freundliche Grüße
  Mit Zitat antworten Zitat
Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#6

Re: Suche geeignete XML-Struktur für TreeView

  Alt 23. Aug 2008, 19:20
@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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz