AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi TXMLDocument nicht als Componente
Thema durchsuchen
Ansicht
Themen-Optionen

TXMLDocument nicht als Componente

Ein Thema von FrankBrin · begonnen am 5. Mai 2007 · letzter Beitrag vom 5. Mai 2007
Antwort Antwort
FrankBrin

Registriert seit: 8. Mär 2005
Ort: Oppenweiler
105 Beiträge
 
Delphi 2007 Enterprise
 
#1

TXMLDocument nicht als Componente

  Alt 5. Mai 2007, 10:36
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
Frank Brinschwitz
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#2

Re: TXMLDocument nicht als Componente

  Alt 5. Mai 2007, 12:51
Es ist ein bekannter Fehler, dass sich das TXMLDocument nicht dynamisch erstellen lässt.

Folgender Code umgeht das Problem:
Delphi-Quellcode:
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;
Viel Spaß damit,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
FrankBrin

Registriert seit: 8. Mär 2005
Ort: Oppenweiler
105 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: TXMLDocument nicht als Componente

  Alt 5. Mai 2007, 13:01
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!
Frank Brinschwitz
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#4

Re: TXMLDocument nicht als Componente

  Alt 5. Mai 2007, 13:07
Zitat:
Dein Codefragment sagt leider nix darüber aus, wie ich denn das XMLDocument über die Lebenszeit einer Klasse am Leben erhalte.
Du kannst ja statt einer globalen Variable das XMLDoc als private-Feld einer Klasse deklarieren. Aber ich nehme an, du meinst Lebenszeit eines Objekts.

var XMLDoc: IXMLDocument; 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.

mfg,
Andreas
Andreas N.
  Mit Zitat antworten Zitat
FrankBrin

Registriert seit: 8. Mär 2005
Ort: Oppenweiler
105 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: TXMLDocument nicht als Componente

  Alt 5. Mai 2007, 13:14
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
Frank Brinschwitz
  Mit Zitat antworten Zitat
EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#6

Re: TXMLDocument nicht als Componente

  Alt 5. Mai 2007, 13:19
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
Andreas N.
  Mit Zitat antworten Zitat
FrankBrin

Registriert seit: 8. Mär 2005
Ort: Oppenweiler
105 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: TXMLDocument nicht als Componente

  Alt 5. Mai 2007, 13:23
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
Frank Brinschwitz
  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 16:56 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