Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#4

AW: TXmlDocument.Create(nil)

  Alt 2. Aug 2015, 15:08
Erstell dir eine Dummy-TComponent-Instanz die du dem constructor übergibst. So funktionierts nicht.
Doch, mit der letztgenannten Lösung funktioniert es tatsächlich: Ich weise dem Create der Klasseninstanz als Owner das aufrufende Formular zu und kann dann ohne Probleme diesen Owner auch der Instanz von TXmlDocument zuweisen.

Das Problem liegt in der gemischten Verwendung von Interfaces und der Klassen-Instanz.
Was meinst du damit genau? Wo verwende ich diese beiden gemischt? Der Fehler in der ersten Variante XmlDok := TXmlDocument.Create(nil); wird ja bereits beim Versuch, auf das Root-Element zuzugreifen, ausgelöst. Und TXmlDocument.DocumentElement ist doch eine Eigenschaft von TXmlDocument , oder etwa nicht?

Lösung: XmlDok:IXmlDocument; , dann klappt es auch ohne Owner
Okay, das habe ich versucht. IXmlDocument kann nicht erzeugt werden, denn es verfügt nicht über eine Create-Methode.
Delphi-Quellcode:
procedure TFormMain.XMLfile_Open(const Datei: String);
Var
  XmlDok : IXmlDocument;
  Root : IXmlNode;
  Txt : String;

begin
  Try
    XmlDok.LoadFromFile(Datei); // erzeugt Zugriffsverletzung
    Root := XmlDok.DocumentElement;
    If Root.HasChildNodes Then
    Begin
      Txt := Root.ChildNodes['rootfiles'].ChildNodes['rootfile'].AttributeNodes['full-path'].Text;
      Memo1.Lines.Append(Txt);
    End;
  Finally
    XmlDok := nil;
  End;
end;
Der Versuch, ein XML-Dokument zu laden, löst jedoch eine Zugriffsverletzung aus:

Im Projekt XMLTEST.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0047C70D in Modul 'XMLTEST.exe'. Lesen von Adresse 00000000' aufgetreten.
  Mit Zitat antworten Zitat