Hallo!
Ich habe ein Programm geschrieben, in dem der Inhalt einer
XML-Datei in einer Baumstruktur (TreeView) dargestellt wird. Zu jedem Knoten im TreeView gibt es eine Referenz auf den zugehörigen
XML-Knoten. Somit kann ich eine Wertänderung im TreeView direkt im
XML-Knoten speichern.
Soweit so gut. Ich habe aber nun eine Funktion, die per xpath bestimmte Knoten im
XML auswählt und automatisch Werte verändert. Diese Änderung möchte ich nun auch direkt auf die TreeView-Anzeige übertragen, ohne den ganzen Baum neu Aufzubauen.
Ich habe also folgendes versucht:
Edit: Fehler korrigiert...
Delphi-Quellcode:
X_Path := '...... ';
XML_CheckNodeList:=XMLDataModule.XMLDoc.selectNodes(X_Path);
XML_CheckNodeList.reset();
XML_CheckNode:= XML_CheckNodeList.nextNode();
while XML_CheckNode <> nil do
begin
//Was verändern
.....
//Nach dem passenden Knoten im TreeView suchen
TreeNode:=FindTypNode(XML_CheckNode );
//TreeNode verändern
.....
XML_CheckNode:= XML_CheckNodeList.nextNode();
end;
function FindTypNode(LinkedXMLNode:IXMLDOMNode):TTreeNode;
var
cnt:integer;
begin
//Durch alle Knoten laufen
for cnt:= 0 to form1.TrView_Struktur.Items.Count-1 do
begin
if PNodeState(form1.TrView_Struktur.Items[cnt].Data).XMLNode
= LinkedXMLNode
then
begin
result:=form1.TrView_Struktur.Items[cnt];
exit;
end;
end;
result:=nil;
end;
Leider ist es aber so, dass die Refernezen (auf die
XML-Knoten), die ich aus der NodeList erhalte nicht mit denen übereinstimmen, die im TreeView hinterlegt sind.
Wird bei "selectnodes" eine Kopie erzeugt?
Ich habe hier ein kleines Verständnisproblem. Deshalb möchte ich gerne:
1. wissen was da passiert
2. eine Lösung für das Problem finden.
Vielen Dank für Eure Unterstützung,
StTüff