Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   documentElement mal da und mal nicht..,, (https://www.delphipraxis.net/156787-documentelement-mal-da-und-mal-nicht.html)

ASKtec 15. Dez 2010 01:25

documentElement mal da und mal nicht..,,
 
Hallo zusammen,

ich habe ein Problem mit XML und dem documentElement, also dem Root-Element. Meine Anwendung funktioniert auf manchen Rechnern und auf manchen nicht. Da wo sie nicht funktioniert kommt es zu einer Zugriffsverletzung beim Zugriff auf documentElement und ich kann mir nicht erklären warum.

Hier mal ein Auszug aus dem Quellcode:
Code:
procedure TForm1.ExportXML;
var
  xmld : IXMLDOMDocument2;
  root, node, newPaket, subnode, subsubnode  : IXMLDomNode;
begin
   xmld := CoDomDocument40.Create;

  if(xmld <> nil) then
  try
    xmld.setProperty('NewParser', true);
    xmld.setProperty('SelectionLanguage', 'XPath');
    xmld.setProperty('SelectionNamespaces',strSelNS);
    xmld.async := true;
    xmld.validateOnParse := false;

    // XML-Grundcode
    xmld.loadXML('<?xml version="1.0" encoding="windows-1252"?>' + #13#10
      + '<Rootnode ' + strNamespace + '/>');                         // <<< hier sollte doch der Root Eintrage erstellt werden

....
.... hier werden die Nodes zusammengebaut
....

   xmld.documentElement.appendChild(newNode);  // <<< hier kommt es zur Exception weil documentElement nil ist


   xmld.save(exportdatei);

  finally
    xmld := nil;
  end;
end;
Hat jemand eine Idee woran es liegen kann, dass es auf manchen Rechnern ohne Problem läuft und auf andern nicht? Es hängt nicht vom Betriebsystem ab und auf allen Rechnern ist MSXML 4 installiert (mind SP2). Ich bin gerade ratlos...

Vielen Dank fürs lesen und für die evtl. Hilfe :wink:

VG
ASKtec

himitsu 20. Dez 2010 09:04

AW: documentElement mal da und mal nicht..,,
 
Delphi-Quellcode:
xmld.async := true;
xmld.validateOnParse := false;
Du sagst arbeite Assynchron (also nicht, warte bis du fertig bist, bevor es weitergeht) und "ignoriere" Fehler.

Und dann beschwerst du dich, wenn eventuelle Fehler nicht bemängelt werden, oder wenn etwas noch nicht fertig ist, bzw. noch nicht existiert, sobald du darauf zugreifen willst.



Code:
....
.... hier werden die Nodes zusammengebaut
....
Was machst du denn da so alles?
(nicht das da auch noch Fehler drin sind)

PS: Wir haben hier auch ein [DELPHI]-Tag, siehe der rote Helm-Button, für lesbarere Delphi-Codes.

PSS: CoDomDocument40.Create sollte eine Exception werfen, wenn nix erstellt werden konnte ... also die Prüfung auf NIL kann entfallen.
Auch das try-finally + :=nil am Ende könnte man weglassen, da dieses Delphi automatisch verbaut, wenn man hier eine lokale Interface-Variable nutzt (so wie du es ja machst) ... also das try steckt im BEGIN der Funktion und finally + :=nil versteckt sich im END; der Funktion.

(aber falsch ist es nicht, falls du es unbedingt mache willst)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 Uhr.

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