AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Instanz von TXMLDocument zur Laufzeit Erstellen und Benutzen
Thema durchsuchen
Ansicht
Themen-Optionen

Instanz von TXMLDocument zur Laufzeit Erstellen und Benutzen

Ein Thema von Kedariodakon · begonnen am 22. Feb 2005 · letzter Beitrag vom 22. Feb 2005
Antwort Antwort
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#1

Instanz von TXMLDocument zur Laufzeit Erstellen und Benutzen

  Alt 22. Feb 2005, 12:18
Dazu habe ich ein Problem!

Das ist erstmal mein Code:
Delphi-Quellcode:
Procedure TForm1.cmd1Click( Sender: TObject );
Var   XML:   TXMLDocument;
Begin
   XML   := Nil;
   { odFile == TOpenDialog }
   If odFile.Execute   Then Begin
      Try
         XML   := TXMLDocument.Create( Nil );
         XML.LoadFromFile( odFile.FileName );
         XML.Active;
         { txtOut == TMemo }
         txtOut.Lines.Append( 'Version:'#9#9         + XML.Version );
         txtOut.Lines.Append( 'Encoding:'#9         + XML.Encoding );
         txtOut.Lines.Append( 'StandAlone:'#9       + XML.StandAlone );
         txtOut.Lines.Append( 'NamespaceURI:'#9   + XML.DocumentElement.NamespaceURI );
         txtOut.Lines.Append( 'LocalName:'#9         + XML.DocumentElement.LocalName );
      Finally
         If Assigned( XML ) Then FreeAndNil( XML );
      End;
   End;
End;
Problem ist nun, das es beim setzen vom Active-Wert zu einer Zugriffsverletzung kommt, aber nicht immer, aber spätestens beim auslesen einer Eigenschaft...
Das Dokument was ich lade ist IO, wenn ich das TXMLDocument zur Entwicklungszeit auf die Form schieb und benutz funzt es ja...

Wo is der plöde Fehler?

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#2

Re: Instanz von TXMLDocument zur Laufzeit Erstellen und Benu

  Alt 22. Feb 2005, 12:32
Hab zwar von XML kaum Ahnung, abere schon mal so versucht?

Delphi-Quellcode:
Procedure TForm1.cmd1Click( Sender: TObject );
Var XML: TXMLDocument;
Begin
   If odFile.Execute Then Begin
      XML := TXMLDocument.Create( Form1 ); // oder wie es bei dir heißt
      Try
         XML.LoadFromFile( odFile.FileName );
         XML.Active;
         txtOut.Lines.Append( 'Version:'#9#9 + XML.Version );
         txtOut.Lines.Append( 'Encoding:'#9 + XML.Encoding );
         txtOut.Lines.Append( 'StandAlone:'#9 + XML.StandAlone );
         txtOut.Lines.Append( 'NamespaceURI:'#9 + XML.DocumentElement.NamespaceURI );
         txtOut.Lines.Append( 'LocalName:'#9 + XML.DocumentElement.LocalName );
         XML.Inactive; // hab gerade keine Plan, wie diese Funktion
                        // wirklich heißt. (halt das Gegenteil von XML.Active)
      Finally
         If Assigned( XML ) Then FreeAndNil( XML );
      End;
   End;
End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Instanz von TXMLDocument zur Laufzeit Erstellen und Benu

  Alt 22. Feb 2005, 12:45
Hmm damit geht es, warum auch immer...
Aber der Constructor ist überladen, sprich es gibt noch eine andere Art ihn aufzurufen:
[oh]
Delphi-Quellcode:
constructor Create(const AFileName: DOMString); reintroduce; overload;
constructor Create(AOwner: TComponent); overload; override;
[/oh]

Wenn ich ihn so aufrufe, passiert das selbe wie wenn ich ihn mit Nil aufrufe und die Dateilade und die Form auf Active setze...

Aber warum? Fehlt mir noch was?


Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: Instanz von TXMLDocument zur Laufzeit Erstellen und Benu

  Alt 22. Feb 2005, 12:53
Hi,

der Umgang mit TXMLDocument ist gelinde gesagt, ganz großer Schrott!!!
Ich hab erst kürzlich damit gearbeitet, und genau diesen Fehler gehabt.

Versuch es mal so (bei dem Teil muss man mit Interface-Instanzen arbeiten, aber frag mich nicht, warum):
Delphi-Quellcode:
Procedure TForm1.cmd1Click( Sender: TObject );
Var
   XML: IXMLDocument; // <-- Interface!!!
Begin
   XML := Nil;
   { odFile == TOpenDialog } 
   If odFile.Execute Then Begin
      Try
         XML := TXMLDocument.Create(odFile.FileName);
         { txtOut == TMemo } 
         txtOut.Lines.Append( 'Version:'#9#9 + XML.Version );
         txtOut.Lines.Append( 'Encoding:'#9 + XML.Encoding );
         txtOut.Lines.Append( 'StandAlone:'#9 + XML.StandAlone );
         txtOut.Lines.Append( 'NamespaceURI:'#9 + XML.DocumentElement.NamespaceURI );
         txtOut.Lines.Append( 'LocalName:'#9 + XML.DocumentElement.LocalName );
      Finally
         XML := nil; // <-- wird nicht über Free gemacht
      End;
   End;
End;
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#5

Re: Instanz von TXMLDocument zur Laufzeit Erstellen und Benu

  Alt 22. Feb 2005, 12:56
Delphi-Quellcode:
DOMString); reintroduce; overload;
Component); overload; [b]override; [/b]
vieleicht liegts am override?

Versuch mal bei beiden die selben Angaben zu machen
Delphi-Quellcode:
DOMString); reintroduce; overload;
Component); reintroduce; overload;
oder
Delphi-Quellcode:
DOMString); overload;
Component); overload;



[add]
@Stevie
XML := nil; // <-- wird nicht über Free gemacht Und wer gibt den Speicher wieder frei? (so wird ja nur der Zeiger darauf gelöscht)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Instanz von TXMLDocument zur Laufzeit Erstellen und Benu

  Alt 22. Feb 2005, 13:08
Öhm So geht es schon einmal aber verstehen tu ich nu gar nichts mehr...
Mit Interfaces hab ich noch nie gearbeitet...
Hab auch keinen Plan wie das geht aber:

IXMLDocument ist doch was ganz anderes als TXMLDocument, aber IXMLDocument ist ein Interface von TXMLDocument richtig ?

Delphi-Quellcode:
//...
TXMLDocument = class(TComponent, IInterface, IXMLDocument, IXMLDocumentAccess)
//...
Die Komponente auf der Form heißt aber auch TXMLDocument
Und wenn ich TXMLDocument.Create mit einem Owner aufrufe läuft es ja auch, aber warum nicht ohne?


Irgendwie bedarf das noch ein wenig Erklärung...

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Instanz von TXMLDocument zur Laufzeit Erstellen und Benu

  Alt 22. Feb 2005, 13:12
Zitat von himitsu:
Delphi-Quellcode:
DOMString); reintroduce; overload;
Component); overload; [b]override; [/b]
vieleicht liegts am override?
Das hab ich ja nicht da hin gemacht, das ist doch Delphi-Source...


Zitat von himitsu:
XML := nil; // <-- wird nicht über Free gemacht Und wer gibt den Speicher wieder frei? (so wird ja nur der Zeiger darauf gelöscht) ?
hmm liegt das net daran, das er mit einem IXMLDocument (Interface) statt einem TXMLDocument(Object) arbeitet?

Wie gesagt, kenne mich mit Interfaces und Interfaceinstanzen nicht aus...


bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: Instanz von TXMLDocument zur Laufzeit Erstellen und Benu

  Alt 22. Feb 2005, 13:15
Also, erstmal: entweder erstellst du dynamisch die Komponente, so wie oben oder du benutzt die Komponente und dann raus mit dem Create aus deinem Source!
Mehr kann ich dir leider auch nicht dazu sagen, leider scheint das Teil sehr buggy zu sein, und andererseits unkommentiert und dokumentiert. Aber es gibt auch gute freie XML-Komponenten, die du benutzen kannst.
Wie gesagt, durch eigenes Rumprobieren und stöbern beim großen Orakel bin ich auf diese Lösung gekommen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Instanz von TXMLDocument zur Laufzeit Erstellen und Benu

  Alt 22. Feb 2005, 17:22
Hi,

das besagte Verhalten ist wahrscheinlich ein Bug in der TXMLDocument Komponente.

Hier hatte ich auch diese Lösung für das Problem erhalten.

Ich arbeite bisher ohne Probleme mit IXMLDocument.

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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