Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML Verzeichnisstruktur in TreeView - wie? (https://www.delphipraxis.net/69453-xml-verzeichnisstruktur-treeview-wie.html)

s-off 15. Mai 2006 14:09


XML Verzeichnisstruktur in TreeView - wie?
 
Hallo zusammen,

ich verzweifle langsam aber sicher. Ich musste mich bisher noch nie mit XML-Dateien auseinander setzen, aber jetzt ist es leider soweit - und dann auch noch soetwas kompliziertes. Habe sowohl hier in der DP gesucht, als auch über Google, als auch im XPath Tutorial auf www.zvon.org, als auch im XML-Tutorial von chakotay..... aber ich bekomme es net gebacken :(

Also, ich habe eine Datei, die die Verzeichnisstruktur einer Festplatte wiederspiegelt. Das Ganze sieht in etwa so aus:

XML-Code:
<?xml version='1.0' encoding='UTF-8'?>
<document>
   <ordner>
      <name>Ordner1</name>
         <datei>
            <name>Datei1</name>
            <groesse>Groesse1</groesse>
            <attribut>Attribut1</attribut>
         </datei>
         <ordner>
            <name>Ordner2</name>
               <datei>
                  <name>Datei2</name>
                  <groesse>Groesse2</groesse>
                  <attribut>Attribut2</attribut>
               </datei>
               <datei>
                  <name>Datei3</name>
                  <groesse>Groesse3</groesse>
                  <attribut>Attribut3</attribut>
               </datei>
               <datei>
                  <name>Datei4</name>
                  <groesse>Groesse4</groesse>
                  <attribut>Attribut4</attribut>
               </datei>
               <ordner>
                  <name>Ordner3</name>
                     <datei>
                        <name>Datei2</name>
                        <groesse>Groesse2</groesse>
                        <attribut>Attribut2</attribut>
                     </datei>
                     <datei>
                        <name>Datei3</name>
                        <groesse>Groesse3</groesse>
                        <attribut>Attribut3</attribut>
                     </datei>
                     <datei>
                        <name>Datei4</name>
                        <groesse>Groesse4</groesse>
                        <attribut>Attribut4</attribut>
                     </datei>
               </ordner>
         </ordner>
   </ordner>
</document>

Man sieht also, dass es in Ordnern, wieder Unterordner geben kann.

Mein Problem besteht nun darin, das ganze in dieser Struktur in einen TreeView (TVirtualStringTree von Mike Lischke) zu bekommen.
Ich kann mir zwar alle Ordner anzeigen lassen, mit

Delphi-Quellcode:
xmlFolder.documentElement.selectNodes('//ordner');
aber dann weiss ich immer noch nicht erkennen kann, dass der Unterordner auch wirklich ein Unterordner ist, und wie dann die Dateien da hinein bekommen?!

Ich stehe echt absolut auf dem Schlauch, da das alles noch Neuland für ist - trotz der durchgearbeiteten Tutorials.

Wäre lieb, wenn mir jemand auf die Sprünge helfen würde - denn ich glaube, dass ich schon im Ansatz alles falsch mache :o(

Danke.

TBx 15. Mai 2006 14:33

Re: XML Verzeichnisstruktur in TreeView - wie?
 
schau Dir mal das XML-Tree-Beispiel auf der Homepage von Mike Lischke an click.

Vielleicht hilft Dir das ja weiter.

Gruß

Onlinekater

s-off 15. Mai 2006 15:25

Re: XML Verzeichnisstruktur in TreeView - wie?
 
Hallo,

danke - leider hilft mir das nicht weiter, da ich die XMLTree.pas nicht kompilieren kann :(

marabu 15. Mai 2006 16:45

Re: XML Verzeichnisstruktur in TreeView - wie?
 
Hallo Sascha,

du wirst da nicht der einzige sein, der das XmlTree-Beispiel nicht kompilieren kann - der Code setzt VST Version 2.5 voraus und einige Methoden haben geänderte Signaturen. Ich weiß jetzt auch nicht, wo dein Problem genau liegt, aber wenn es mehr auf der XML-Seite ist und du mit dem VST schon klar kommst, dann hilft dir vielleicht das Studium einer Demo für die Übernahme von XML-Daten in einen Viewer: klick

Grüße vom marabu

s-off 15. Mai 2006 20:04

Re: XML Verzeichnisstruktur in TreeView - wie?
 
Hallo marabu,

vielen Dank für Deine Antwort - das Beispiel werde ich mir ansehen.

Mein Problem liegt, wie Du bereits vermutet hast, tatsächlich auf XML-Ebene.
Ich weiss halt nicht, wie ich den Code schreiben soll, so dass ich alle Ordner in der gewünschten Struktur (Ordner -> Unterordner -> Unterordner...) in den Tree bekomme, und ob ein Ordner überhaupt einen Unterordner hat etc.
Ich habe leichte Orientierungsschwierigkeiten, da sich der Name des Ordners in einem weiteren Element darunter befindet.
Da blicke ich irgendwie nicht dran lang :?

Nun ja, jetzt erstmal das Demo - und wenn das nicht hilft, dann nerve ich weiter :wink:

marabu 15. Mai 2006 20:53

Re: XML Verzeichnisstruktur in TreeView - wie?
 
Hier noch eine kleine Gehhilfe. Du kannst sie anstelle von ShowStructure() verwenden. Sie zeigt den Umgang mit deinem Dokument. Die Existenz von "ordner/name" und "datei" auf der selben Ebene ist kein gutes Design, aber wahrscheinlich möchte dich jemand mit diesem Dokument ärgern.

Delphi-Quellcode:
procedure TDemoForm.ShowFolder(e: IXMLDOMElement; nParent: TTreeNode);
var
  i: Integer;
  nl: IXMLDOMNodeList;
  n: TTreeNode;
  eChild, eName: IXMLDOMElement;
  s: String;
begin
  nl := e.selectNodes('ordner|datei');
  for i := 0 to Pred(nl.length) do
  begin
    eChild := nl.item[i] as IXMLDOMElement;
    eName := eChild.selectSingleNode('name') as IXMLDOMElement;
    if eChild.tagName = 'ordner' then
    begin
      s := AnsiUppercase(eName.text);
      n := TreeNodes.AddChildObject(nParent, s, TReference.Create(eChild));
      ShowFolder(eChild, n);
    end else
    begin
      s := AnsiLowercase(eName.text);
      TreeNodes.AddChildObject(nParent, s, TReference.Create(eChild));
    end;
  end;
end;
marabu

s-off 16. Mai 2006 11:05

Re: XML Verzeichnisstruktur in TreeView - wie?
 
Hallo marabu,

vielen Dank für das Beispiel und die Gehhilfe :)
Das hat wirklich etwas gebracht!!!!! :hello:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 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