Zitat von
gsh:
ich kann es höchstens so machen XMLDocument := TXMLDocument.Create; dann geht es zwar mal anscheinend ... aber ich kanns nicht freigeben
und warum wird das TXMLDocument objekt gleich nach dem konstruieren wieder freigegeben?
Das ist halt so bei Interfaces; unter Delphi werden diese automagisch vom Compiler freigegeben.
Du solltest die Funktion
CreateXMLDoc aus
Unit OmniXML verwenden.
Eigentlich hätten die Leute von OmniXML die Klasse TXMLDocument nach dem Keywort "implementation"
deklarieren müssen, damit man gar nicht diesen Fehler machen kann.
Ich habe auch gleich mal deine schlechte
Exception-Behandlung berichtigt und
aus der function eine procedure gemacht.
Entweder die procedure läuft erfolgreich durch oder es wird eine Exception mit
aussagekräftiger Fehlermeldung erzeugt.
Delphi-Quellcode:
procedure XML_Load(XMLFilename :
String; VST : TVirtualStringTree);
var
XMLDocument : IXMLDocument;
// <=== Interface !!
begin
XMLDocument := CreateXMLDoc;
try
if FileExists(XMLFilename)
then
XMLDocument.Load(XMLFilename)
else
XMLDocument.LoadXML('
<?xml version="1.0"?><List></List>');
except
on E:
Exception do
begin
E.
Message := '
XML Fehler beim Laden der Datei "'+XMLFilename+'
"'#13#10+
E.
Message;
raise;
end;
end;
VST.Clear;
VST.BeginUpdate;
ShowMessage(XMLDocument.DocumentElement.NodeName);
VST.EndUpdate;
end;