![]() |
Treeview mit XML-Dokument füllen
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] |
Re: Treeview mit XML-Dokument füllen
Es kommt erstmal darauf an, wie und was du in dem TreeView anzeigen möchtest.
Ein Beispiel fündest du z.B. in ![]() in Kurz sähe Dieses etwa so aus:
Delphi-Quellcode:
Du nimmst dir den Hauptnode des XML-Dokuments vor und füllst dessen Knoten in den Hauptknoten des TreeView ein
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; 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. |
Re: Treeview mit XML-Dokument füllen
Danke, das ist sehr nett von dir! Ich werde es sofort ausprobieren sobald von aus dem urlaub bin!
Lizzy :) |
Re: Treeview mit XML-Dokument füllen
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... :wall: Kann mir hierbei jmd helfen? Mfg t4rI |
Re: Treeview mit XML-Dokument füllen
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] |
Re: Treeview mit XML-Dokument füllen
Naja ... :wall:
Hab es selbst hinbekommen ;) Danke trotzdem Gruß t4rI |
Re: Treeview mit XML-Dokument füllen
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?
|
AW: Treeview mit XML-Dokument füllen
Zitat:
Delphi-Quellcode:
mfG
...
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; ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 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-2025 by Thomas Breitkreuz