AGB  ·  Datenschutz  ·  Impressum  







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

Pointer auf IXMLDOMElement

Ein Thema von F.W. · begonnen am 23. Jan 2007 · letzter Beitrag vom 23. Jan 2007
Antwort Antwort
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#1

Pointer auf IXMLDOMElement

  Alt 23. Jan 2007, 14:50
Hallo DPler!

Ich habe jetzt schon überall im Internet und hier gesucht, doch nirgends etwas gefunden (ausgenommen EINEN Treffer in einem kostenpflichtigen Forum ) Ich bin auch fast überzeugt, dass ich etwas übersehen haben muss. Denn es kommt mir komisch vor, dass ich der erste sein soll, der danach fragt...

Ich liste alle Knoten aus einer XML-Datei in einem TTreeView auf. Jedoch hat jeder XML-Knoten noch mehrere Properties, die ich gern anzeigen lassen möchte, wenn man auf der/das? entsprechende Node im TreeView klickt.
Damit ich einen Bezug zwischen den zweien herstellen kann, habe ich nun versucht einen Pointer auf den XML-Knoten im TreeNode.Data zu speichern.
Aber das funzt nicht richtig (hatte auch schon Probleme zu dem Pointer zu kommen, da es mit dem @-Operator ja nicht funktioniert)
Delphi-Quellcode:
var
 TreeNode: TTreeNode;
 xmlNode: IXMLDOMElement;

   {  Einlesen in TreeView  }

 for I := 0 to xmlNode.childNodes.length-1 do begin
        TreeNode := Tree.Items.AddChild(NIL, (xmlNode.childNodes[I] as IXMLDOMElement).getAttribute(AttrName));
        TreeNode.Data := Pointer(xmlNode.childNodes[I]);

   {  Auslesen aus TreeView  }

 xmlNode := IXMLDOMElement(Node.Data);
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Pointer auf IXMLDOMElement

  Alt 23. Jan 2007, 14:57
Geht auch nicht direkt. Aber nutze einen Wrapper, das ist relativ einfach.
Delphi-Quellcode:
type
  TNodeData = class
  private
    FXMLNode: IXMLDOMNode;
  public
    constructor Create(aXMLNode:IXMLDOMNode);
    property XMLNode: IXMLDOMNode read FXMLNode;
  end;

....

var
TreeNode: TTreeNode;
xmlNode: IXMLDOMElement;

   {  Einlesen in TreeView  } 

for I := 0 to xmlNode.childNodes.length-1 do begin
        TreeNode := Tree.Items.AddChild(NIL, (xmlNode.childNodes[I] as IXMLDOMElement).getAttribute(AttrName));
        TreeNode.Data := TNodeData.Create(xmlNode.childNodes[I]);

   {  Auslesen aus TreeView  } 

xmlNode := TNodeData(Node.Data).XMLNode;
Aber nicht vergessen die Klasse später wieder freizugeben

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#3

Re: Pointer auf IXMLDOMElement

  Alt 23. Jan 2007, 15:09
Danke sakura!! Es funktioniert endlich

Noch eine Frage zum Wiederfreigeben: Wie gestalte ich das bei einem TreeView am elegantesten wenn ich den ganzen bzw. Teile davon löschen möchte?
Muss ich mir da extra was Rekursives basteln oder gibts da schon vorgefertigte Sachen von der VCL?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Pointer auf IXMLDOMElement

  Alt 23. Jan 2007, 15:22
Zitat von F.W.:
Muss ich mir da extra was Rekursives basteln oder gibts da schon vorgefertigte Sachen von der VCL?
Einfach die ausgewählte Node aus dem TreeView löschen. Dabei auch die entsprechende Node aus dem XMLDOM löschen. Der Rest geschieht von allein.

Für das Löschen von TreeNodes gibt es imo auch ein Event im Objektinspektor, so dass Du dann die entsprechenden Objekte aus dem Data-Pointer jeweils freigeben kannst

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#5

Re: Pointer auf IXMLDOMElement

  Alt 23. Jan 2007, 15:28
Zitat von sakura:
Für das Löschen von TreeNodes gibt es imo auch ein Event im Objektinspektor, so dass Du dann die entsprechenden Objekte aus dem Data-Pointer jeweils freigeben kannst
Stimmt, hab das Ereignis OnDeletion gefunden. Das ist mir um einiges lieber als extra rekursiv durchzugehen

Nochmal danke, jetzt kann ich endlich weitercoden

  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 17:53 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