AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Treeview mit XML-Dokument füllen

Ein Thema von Lizzy · begonnen am 13. Jun 2009 · letzter Beitrag vom 24. Jan 2017
Antwort Antwort
Lizzy

Registriert seit: 23. Nov 2008
5 Beiträge
 
#1

Treeview mit XML-Dokument füllen

  Alt 13. Jun 2009, 19:26
Hallo ich habe jetzt ein XML-Dokument, dass ich gerne in Delphi(noch besser Lazarus) bearbeiten möchte. Ich habe mich hier schon umgesehen und bin zum entschluss gekommen, dass ich es am besten mit treeview machen sollte(oder?). Das problem ist, ich kenne mich mit Treeview überhaupt nicht aus - ich kenne XML auch erst seit kurzem. Kannst du mir vielleicht dabei helfen, vielleicht erst einmal das TreeView mit den XML-Informationen zu füllen (am besten genauso strukturiert). Das wär soo toll und nett!

Hier der anfang des XML-Dokuments:

XML-Code:
<?xml version="1.0" encoding="iso-8859-1" ?>
- <Setup>
- <Microscope>
  <name>Axioplan</name>
  <number>0</number>
- <Objectives>
  <ActiveObjective>none</ActiveObjective>
  </Objectives>
- <xyStage>
  <XStageOffset>0</XStageOffset>
  <ScanDirection>+</ScanDirection>
  <XStart>0</XStart>
  <XStep>200</XStep>
  <XMaxPos>11</XMaxPos>
  <YStageOffset>0</YStageOffset>
  <YStart>0</YStart>
  <YStep>500</YStep>
  <YMaxPos>3</YMaxPos>
  </xyStage>
- <focus>




PS: Viellicht wirst du sagen, dass ich erstmal andere Beiträge durchlesen soll bevor ich ein neues Thema anfange. Aber das habe ich bereits, aber ich habe gemerkt, dass die meinsten schon viel weiter sind und sich nicht mit diesen grundlegneden problemen beschäftigen.

[edit=mkinzler]XML-Tag eingefügt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Treeview mit XML-Dokument füllen

  Alt 17. Jun 2009, 12:41
Es kommt erstmal darauf an, wie und was du in dem TreeView anzeigen möchtest.

Ein Beispiel fündest du z.B. in Hier im Forum suchenhimXML > demos\Demo_Tree > Demo_TreeU.pas > TForm1.FillTree

in Kurz sähe Dieses etwa so aus:
Delphi-Quellcode:
Procedure TForm1.FillTree;
  Procedure Fill(Nodes: TXMLNodeList; Item: TTreeNode);
    Var Node: TXMLNode;
      Item2: TTreeNode;

    Begin
      Node := Nodes.FirstNode;
      While Assigned(Node) do Begin
        Item2 := TreeView1.Items.AddChildObject(Item, Node.Name, nil);
        If Node.Nodes.hasChildNodes Then Fill(Node.Nodes, Item2);
        Node := Node.NextNode;
      End;
    End;

  Begin
    TreeView1.Items.Clear;
    Fill(XML.Nodes, nil);
  End;
Du nimmst dir den Hauptnode des XML-Dokuments vor und füllst dessen Knoten in den Hauptknoten des TreeView ein

Hat ein XML-Node "Kinter" (untergeordnete Nodes), dann nimmst du wiederum diese und füllst sich in den entsprechenden Knoten des TreeView und wiederholst das so lange, bis alles drin ist.

Das wäre so die "einfache" rekursive Methode.
$2B or not $2B
  Mit Zitat antworten Zitat
Lizzy

Registriert seit: 23. Nov 2008
5 Beiträge
 
#3

Re: Treeview mit XML-Dokument füllen

  Alt 8. Jul 2009, 09:37
Danke, das ist sehr nett von dir! Ich werde es sofort ausprobieren sobald von aus dem urlaub bin!
Lizzy
  Mit Zitat antworten Zitat
t4rI

Registriert seit: 22. Jul 2009
Ort: Ludwigshafen
13 Beiträge
 
#4

Re: Treeview mit XML-Dokument füllen

  Alt 22. Jul 2009, 10:14
Hi,
ich hatte auch diese Problem habe das Programm jedoch inzwischen zum Laufen gebracht....
Mein nächstes Problem ist es aber, den Treeview mit den Atrributen der XML zufüllen...
Kann mir hierbei jmd helfen?

Mfg
t4rI
  Mit Zitat antworten Zitat
t4rI

Registriert seit: 22. Jul 2009
Ort: Ludwigshafen
13 Beiträge
 
#5

Re: Treeview mit XML-Dokument füllen

  Alt 22. Jul 2009, 10:33
sry =) ich sollte vllt auch einen Code dazufügen.....

Delphi-Quellcode:
procedure TForm1.XMLtoTree;
var
  iNode: IXMLNode;
  Data : PTreeData;
  TreeData : TTreeDataClass;
    procedure ProcessNode(Node: IXMLNode; TreeNode: PVirtualNode);
    var
        cNode: iXMlNode;
        VNode, V2Node : PVirtualNode;
        Test : String;
    begin
        if Node = nil then Exit;



        TreeNode := VirtualTree.AddChild(nil);
        Data := VirtualTree.GetNodeData(TreeNode);
        Data.FCaption := Node.NodeName;
        Node := INode.AddChild(Data.FCaption);


        if Node.HasChildNodes then begin
            cNode := Node.ChildNodes[0];
            VNode := VirtualTree.AddChild(TreeNode, nil);
            Data := VirtualTree.GetNodeData(VNode);
            Data.FCaption := cNode.NodeName;
            cNode := Node.AddChild(Data.FCaption);

        if cNode.HasChildNodes then
            cNode := Node.ChildNodes[0];
            V2Node := VirtualTree.AddChild(VNode, nil);
            Data.FCaption := cNode.NodeName;
            cNode := Node.AddChild(Data.FCaption);

            //Data hinzufügen
            //Data -> FCaption = Name der Node
            //Data -> FObject -> FBeschreibung = Attribut aus XML

            while cNode <> nil do
            begin
              ProcessNode(cNode, TreeNode);
              cNode := cNode.NextSibling;
            end;
        end;



procedure TForm1.TreeToXML(aFirstnode: PVirtualNode);
var
ProjektHomeNode : IXMLNode;
tn : PVirtualNode;
iNode : IXMLNode;
Data : PTreeData;
TreeData : TTreeDataClass;
procedure ProcessTreeItem(
        tn : PVirtualNode;
        iNode : IXMLNode;
        Data : PTreeData;
        TreeData : TTreeDataClass);
var
cNode : IXMLNode;
begin
    if (tn=Nil) then Exit;
        Data := VirtualTree.GetNodeData(tn);
        cNode := INode.AddChild(Data.FCaption);
        cNode.Attributes['Beschreibung']:= TreeData.FBeschreibung;
        cNode.Attributes['Startzeit']:= TreeData.FStartzeit;
        cNode.Attributes['Zielzeit'] := TreeData.FZielzeit;
        cNode.Attributes['Status'] := TreeData.FCombo1;
        cNode.Attributes['Priorität']:= TreeData.FCombo2;
        tn := tn.FirstChild;
    while tn <> nil do begin
        ProcessTreeItem(tn, cNode, Data, TreeData);
        tn := tn.NextSibling;
    end;
end;
  (*ProcessTreeItem*)
begin
    ProjektDocument.Active := True;
    Data := VirtualTree.GetNodeData(aFirstnode);
    tn := aFirstnode;
    ProjektHomeNode := ProjektDocument.AddChild('Projekt');
    iNode := ProjektHomeNode.AddChild(Data.FCaption);
    tn := VirtualTree.TopNode;
    TreeData := Data.FObject;
    iNode.Attributes['Beschreibung']:= TreeData.FBeschreibung;
    iNode.Attributes['Startzeit']:= TreeData.FStartzeit;
    iNode.Attributes['Zielzeit'] := TreeData.FZielzeit;
    iNode.Attributes['Status'] := TreeData.FCombo1;
    iNode.Attributes['Priorität']:= TreeData.FCombo2;
    while tn <> nil do
        begin
        ProcessTreeItem (tn, iNode, Data, TreeData);
        tn := tn.NextSibling;
        end;
end;



Danke !!!!
MFG t4rI

[edit=mkinzler]Tag korrigiert Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
t4rI

Registriert seit: 22. Jul 2009
Ort: Ludwigshafen
13 Beiträge
 
#6

Re: Treeview mit XML-Dokument füllen

  Alt 22. Jul 2009, 17:36
Naja ...
Hab es selbst hinbekommen
Danke trotzdem
Gruß
t4rI
Alle Rechtschreibfehler sind gewollt
und zusammengerechnet ergeben sie die Formel, wie man Schlümpfe in gold verwandelt!
  Mit Zitat antworten Zitat
Lizzy

Registriert seit: 23. Nov 2008
5 Beiträge
 
#7

Re: Treeview mit XML-Dokument füllen

  Alt 9. Aug 2009, 17:31
Sry, ich kriegs trotzdem nicht hin: wo soll ich das XMLDokument reinladen? ein weiteres problem ist, ich hab nur azarus, dh viele befehle werden beim debuggen markiert. Wisst ihr vllt weiter?
  Mit Zitat antworten Zitat
Benutzerbild von fs999
fs999

Registriert seit: 4. Dez 2006
Ort: Luxembourg
46 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Treeview mit XML-Dokument füllen

  Alt 24. Jan 2017, 13:50
Es kommt erstmal darauf an, wie und was du in dem TreeView anzeigen möchtest.

Ein Beispiel fündest du z.B. in Hier im Forum suchenhimXML > demos\Demo_Tree > Demo_TreeU.pas > TForm1.FillTree

in Kurz sähe Dieses etwa so aus:
Delphi-Quellcode:
Procedure TForm1.FillTree;
  Procedure Fill(Nodes: TXMLNodeList; Item: TTreeNode);
    Var Node: TXMLNode;
      Item2: TTreeNode;

    Begin
      Node := Nodes.FirstNode;
      While Assigned(Node) do Begin
        Item2 := TreeView1.Items.AddChildObject(Item, Node.Name, nil);
        If Node.Nodes.hasChildNodes Then Fill(Node.Nodes, Item2);
        Node := Node.NextNode;
      End;
    End;

  Begin
    TreeView1.Items.Clear;
    Fill(XML.Nodes, nil);
  End;
Du nimmst dir den Hauptnode des XML-Dokuments vor und füllst dessen Knoten in den Hauptknoten des TreeView ein

Hat ein XML-Node "Kinter" (untergeordnete Nodes), dann nimmst du wiederum diese und füllst sich in den entsprechenden Knoten des TreeView und wiederholst das so lange, bis alles drin ist.

Das wäre so die "einfache" rekursive Methode.
Da fehlen noch die Werten...

Delphi-Quellcode:
      ...
      Item2 := Items.AddChildObject(Item, Node.Name, nil);
      if Node.Nodes.NodeCount > 0 then
        Fill(Node.Nodes, Item2)
      // wenn keine subnodes dann Wert einfügen !
      else
        Items.AddChildObject(Item2, Node.XMLText, nil);
      Node := Node.NextNode;
      ...
mfG

Geändert von fs999 (24. Jan 2017 um 13:54 Uhr)
  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 21:09 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