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