Hallo Andreas,
mit dem Hinweis auf das in MS SAX2 implementierte push model legst du den Finger in eine Wunde. In meiner Demo arbeite ich mit EINEM root object - nur so macht die gezeigte Methode Serialize() überhaupt Sinn. Die Signatur der Methode Deserialize() in meinem Beispiel ist übrigens durch Copy & Paste entstanden und sollte kein versteckter Hinweis auf eine Machbarkeit sein. Selbst wenn wir eine einzige Objekt-Verwaltungsinstanz als gegeben annehmen, würde ich angesichts der MS SAX2 Implementierung wohl eher auf zwei externe Funktionen setzen:
Delphi-Quellcode:
type
TObjectManager = class; // to be coded
var
root: TObjectManager;
s: TStream;
fn: TFileName;
begin
fn := ChangeFileExt(ParamStr(0), '.xml');
s := TFileStream.Create(fn, fmCreate or fmShareDenyWrite);
root := TObjectManager.Create;
// ... fill me up
Serialize(root, s);
root.Free;
s.Free;
s := TFileStream.Create(fn, fmOpenRead or fmShareDenyWrite);
root := Deserialize(s);
// ... dump root
root.Free;
s.Free;
end;
Gute Nacht
marabu