![]() |
TXMLDocument nicht als Componente
Moin miteinander,
hab da ein Problem, wo ich trotz aller Suche kein zufriedenstellendes Ergebnis gefunden habe. Ich habe mir zum Lesen und Schreiben einer XML Datei zuerst ein Form gebaut auf dem ich das TXMLDocument gezogen hatte. Bis hierher alles prima! Nun ist die App ein bischen größer geworden und mir viel auf, das ich die Funktionalitäten, die direkt mit der XML-Datei arbeiten an vielen anderen Stellen auch benötige. Also habe ich eine eigene Unit (TObject) draus gemacht. So und jetzt kommt ständig sobald ich auf einen Node zugreifen will ein "Access Violation". Der Zarko Gajic hat auf seiner About Seite so etwas schon angedeutet. Er sagt das man das Dokument jedesmal, wenn man mit arbeitet erst öffnen muss??? Das geht doch bestimmt einfacher. Kann mir jemand hier weiterhelfen? Gruß Frank |
Re: TXMLDocument nicht als Componente
Es ist ein bekannter Fehler, dass sich das TXMLDocument nicht dynamisch erstellen lässt.
Folgender Code umgeht das Problem:
Delphi-Quellcode:
Viel Spaß damit,
uses xmldom, XMLIntf, msxmldom, XMLDoc;
... var XMLDoc: IXMLDocument; ... { Create XML document } XMLDoc:= TXMLDocument.Create(nil); { Assign default values... } with XMLDoc do begin Options:= [doNodeAutoCreate, doNodeAutoIndent,doAttrNull,doAutoPrefix,doNamespaceDecl]; ParseOptions:= []; NodeIndentStr:= ' '; end; XMLDoc.Active:= TRUE; { Destroy XML document } XMLDoc:= nil; Andreas |
Re: TXMLDocument nicht als Componente
Hallo Andreas,
soweit ist mir das ja auch schon klar! Ob das nun ein Fehler ist oder reiner Wille sei dahin gestellt! Dein Codefragment sagt leider nix darüber aus, wie ich denn das XMLDocument über die Lebenszeit einer Klasse am Leben erhalte. Gibt es da überhaupt eine Möglichkeit? Gruß Frank PS.: Derzeit habe ich das XMLDocu mit all seinen Funktionen mal in eine TDataModul Klasse gesetzt - gefällt mir nicht - tut aber! |
Re: TXMLDocument nicht als Componente
Zitat:
Delphi-Quellcode:
Solange du XMLDoc nicht auf nil setzt, bleibt es im Speicher. Es gab sogar mal einen BDN-Artikel dazu, aber ich kann ihn nicht mehr finden.
var XMLDoc: IXMLDocument;
mfg, Andreas |
Re: TXMLDocument nicht als Componente
Andreas,
ok, jetzt ist mir mein Fehler auch klar! Ich muss die Variable als IXMLDocument zugänglich deklarieren und mit Deinem CodeFragment dann zuweisen! Werd's gleich mal einbauen! Gruß und Danke Frank |
Re: TXMLDocument nicht als Componente
Ja, man muss die Variable als IXMLDocument statt als TXMLDocument deklarieren. Die Lösung hat nur den einen Nachteil, dass man den DOM-Provider nicht auswählen kann.
Mir hat dieses Problem ebenfalls monatelange Sorgen bereitet. mfg, Andreas |
Re: TXMLDocument nicht als Componente
Also daß funktioniert mittlerweile! Mit dem DOMVendor ist mir im Augenblick egal, da ich sowieso mit dem MSXML Parser arbeite und dieser ja hoffentlich voreingestellt ist.
Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz