AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Anfrage Zu JvSimpleXML und Treeview
Thema durchsuchen
Ansicht
Themen-Optionen

Anfrage Zu JvSimpleXML und Treeview

Ein Thema von Bornemaxx · begonnen am 27. Sep 2017 · letzter Beitrag vom 1. Okt 2017
Antwort Antwort
Bornemaxx

Registriert seit: 28. Nov 2007
9 Beiträge
 
#1

Anfrage Zu JvSimpleXML und Treeview

  Alt 27. Sep 2017, 20:07
Hallo !

Ich habe schon eine ganze Weile gesucht, aber nichts passendes gefunden. Deshalb frage ich jetzt mal in die Runde.
Ich bein gerade dabei, etwas mit XML zu experimentieren. Das Einlesen möchte ich gerne mit der JvSimpleXml-Komponente der Jedis machen. Anzeigen möchte ich die Daten in einem TreeView. Dazu habe ich das Beispiel zur JvSimpleXml-Komponente genutzt. Nun möchte ich aber auch geänderte Daten aus dem Tree wieder in die entsprechenden XML-Elemente schreiben. Dabei scheitere ich. Um das zu erreichen wollte ich einen Zeiger auf das XML-Element im Tree unterbringen. Ich hoffe, das mit den Zeigern habe ich richtig begriffen, habe so was schon mal mit selbst definierten Objekten gemacht. Den Zeiger habe ich zum so definiert:
Type PointerToXmlElement=^TjvSimpleXmlElem Zum Testen nutze ich eine globale Variable (var PX: PointerToXmlElement), die in beim Einlesen der Daten mit der Adresse des XML-Elementes (@AnXMLNode) befüllt wird.
Hier das Einlesen aus dem Beispiel:
Delphi-Quellcode:
procedure TForm1.ParseIntoTreeView(AnXMLNode: TJvSimpleXmlElem; ATreeNode: TTreeNode);
var
  i, j: integer;
  S, T: string;
begin
  if AnXMLNode <> nil then
  begin
    if AnXMLNode.Value <> 'then
      S := AnXMLNode.Name + '=' + AnXMLNode.Value
    else
      S := AnXMLNode.Name;
    T := '';
    for j := 0 to AnXMLNode.Properties.Count - 1 do
      T := T + ' ' + AnXMLNode.Properties[j].Name + '="' + AnXMLNode.Properties[j].Value + '"';
    ATreeNode := JvTreeView1.Items.AddChild(ATreeNode, S + ' (' + trim(T) + ')');
    for i := 0 to AnXMLNode.Items.Count - 1 do
      ParseIntoTreeView(AnXMLNode.Items[i], ATreeNode);
  end;
    PX:=@AnXMLNode;
    showmessage(PX^.name+'<--->'+AnXMLNode.Name); // Hier sind die Namen beide im Klartext vorhanden
end;
Während des Einlesens klappt auch alles, über den dereferenzierten Zeiger ist auch der name des XML-Elements sichtbar.
Wenn ich dann später über den Zeiger auf das XML-Element zugreifen will, scheint das nicht mehr verfügbar zu sein.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
 showmessage(PX^.name);
end;
Hier ist zwar der Inhalt von PX noch vorhanden, der Name ist nicht mehr verfügbar.
Mache ich hier generell einen Fehler?
Vielleicht gibt es ja auch eine Möglichkeit, ein XML-Element direkt anzusprechen. Es ist mir irgendwie zu umständlich, mich immer durch alle Ebenen zu hangeln.

Vielen Dank schon mal für Eure Hilfe
  Mit Zitat antworten Zitat
Bornemaxx

Registriert seit: 28. Nov 2007
9 Beiträge
 
#2

AW: Anfrage Zu JvSimpleXML und Treeview

  Alt 1. Okt 2017, 17:58
Hallo noch mal,

Bin inzwischen selbst drauf gekommen.
Es muss einem nur klar werden, dass die XML-Elemente im JvSimpleXML nur Zeiger sind. Dann kann man ganz einfach dem TreeViewNode im Data den Zeiger mitgeben.
ATreeNode.Data:=AnXmlNode; Damit kann man jederzeit wieder auf das entsprechende XML-Element zugreifen.
Delphi-Quellcode:
procedure TForm1.JvTreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  showmessage(TJvSimpleXmlElem(Node.Data).Name+' = '+TJvSimpleXmlElem(Node.Data).value);
end;
Vielleicht hilft es ja irgendwem.

Danke an alle, die den Beitrag gelesen haben und sich darüber Gedanken gemacht haben

Viele Grüße
Mirko
  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: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