Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Problem mit TXMLDocument (Delphi7) (https://www.delphipraxis.net/18895-problem-mit-txmldocument-delphi7.html)

mirage228 25. Mär 2004 18:49


Problem mit TXMLDocument (Delphi7)
 
Hi,

ich wollte heute mal mit dem TXMLDocument von Delphi 7 arbeiten.

Ich hab mir folgenden Code geschrieben: [FXMLFile ist der Dateiname vom Typ String und ja, die Datei existiert, und ja mit LoadFromFile habe ich es auch schon probiert :-\]

Delphi-Quellcode:
var
  XMLDocument : TXMLDocument;
begin
  XMLDocument := TXMLDocument.Create(FXMLFile);
  try
    XMLDocument.DOMVendor := DOMVendors.Find(DEFAULTDOMVENDOR);
    XMLDocument.FileName := FXMLFile;
    XMLDocument.Active := True;
    if XMLDocument.DocumentElement.NodeName = 'acitsettings' then
    begin
      // einträge auslesen
    end;
  finally
    XMLDocument.Free;
end;
Jedoch führt der Zugriff auf DocumentElement zu einem Fehler:
Code:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt UT2003ACIT.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK  Hilfe  
---------------------------
Was habe ich falsch gemacht? Wie kann ich das Problem lösen?

mfG
mirage228

mirage228 28. Mär 2004 17:47

Re: Problem mit TXMLDocument (Delphi7)
 
Sorry fürs pushen ( :duck: ), aber ich würde das Projekt gerne schnellstmöglich noch zu Ende machen.
Bitte, jemand muss doch wissen, wieso das bei mir nicht klappt... :(

mfG
mirage228

CalganX 28. Mär 2004 17:50

Re: Problem mit TXMLDocument (Delphi7)
 
Hi,
schonmal mit Hilfe von Breakpoints geguckt, wo der Fehler liegt?

Chris

mirage228 28. Mär 2004 17:59

Re: Problem mit TXMLDocument (Delphi7)
 
Hi Chris,

der Zugriff auf "DocumentElement" bringt im Evaluator die obige AccessViolation (die im Programm dann ausgelöst wird) und danach einen EAbstractError. "DOMDocument" ist seltsamerweise auch nil, was eigentlich nicht sein dürfte.
Active ist auf True und FileName ist auch korrekt gesetzt...

Alles sehr seltsam... :?:

mfG
mirage228

Kastor 28. Mär 2004 18:19

Re: Problem mit TXMLDocument (Delphi7)
 
Hi,

Code:
var
  XMLDocument : TXMLDocument;
begin
  XMLDocument := TXMLDocument.Create(FXMLFile);
  try
    XMLDocument.DOMVendor := DOMVendors.Find(DEFAULTDOMVENDOR);
    XMLDocument.FileName := FXMLFile;
    XMLDocument.Active := True;
    if XMLDocument.DocumentElement.NodeName = 'acitsettings' then
    begin
      // einträge auslesen
    end;
  finally
    XMLDocument.Free;
end;
Ersetze mal das TXMLDocument durch ein
Code:
IXMLDocument
das ist so viel ich weiß ein Fehler in der Implementierung der TXMLDocument Klasse.

Gruß, Kastor

mirage228 28. Mär 2004 18:49

Re: Problem mit TXMLDocument (Delphi7)
 
Danke, danke, danke, danke, danke! :love:

Du bist mein Retter, jetzt klappt es ^^ :bouncing4: :bounce1:

Jetzt kann ich endlich weiter :coder:

mfG
mirage228

P.S.: Ich frage mich, wann Borland sich mal dazu herablässt das zu patchen :roll:

rschatzl 29. Apr 2004 07:04

Re: Problem mit TXMLDocument (Delphi7)
 
Hallo,
du versuchst den Constructor mit dem Filenamen auszuführen!
das führt natürlich zu einer Null Pointer Exception
XMLDocument := TXMLDocument.Create(FXMLFile);

um eine Instanz eines Objektes zu erzeugen musst du als Parameter den Owner mitgeben,
meistens wird es wohl ein Formular sein, also Aufruf mit Self Variable oder Formularname

XMLDocument := TXMLDocument.Create(self);
oder z.B
XMLDocument := TXMLDocument.Create(Form1);

mirage228 29. Apr 2004 12:33

Re: Problem mit TXMLDocument (Delphi7)
 
Zitat:

Zitat von rschatzl
Hallo,
du versuchst den Constructor mit dem Filenamen auszuführen!
das führt natürlich zu einer Null Pointer Exception
XMLDocument := TXMLDocument.Create(FXMLFile);

um eine Instanz eines Objektes zu erzeugen musst du als Parameter den Owner mitgeben,
meistens wird es wohl ein Formular sein, also Aufruf mit Self Variable oder Formularname

XMLDocument := TXMLDocument.Create(self);
oder z.B
XMLDocument := TXMLDocument.Create(Form1);

Hi,

so geht es natürlich.

Aber wieso wird dann auch ein Dateiname im Konstruktor angeboten?

Hm, naja mit IXMLDocument läuft es auf jeden fall. ;)

mfG
mirage228


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz