![]() |
Beim XML laden bleibt die Anwendung einfach hängen
Hi Leute
Ich komm hier einfach nicht weiter. Ich versuche Daten aus einer XML Datei zu lesen aber irgendwie geht gar nichts und die Anwendung bleibt einfach hängen.
Delphi-Quellcode:
Und hängen bleiben versteh ich: Er geht in die Codezeile hinein (Debugger) geht aber nie mehr raus und die Anwendung ist absolut eingefroren
function XML_Load(XMLFilename : String; VST : TVirtualStringTree) : Boolean;
var XMLDocument : TXMLDocument; begin Result := true; try XMLDocument := TXMLDocument.Create(nil); try XMLDocument.NodeIndentStr := '<2 Leerzeichen>'; XMLDocument.FileName := XMLFilename; if (not(FileExists(XMLFilename))) or (XMLDocument.IsEmptyDoc) then begin XMLDocument.LoadFromXML('<?xml version="1.0"?><'+cXMLRootNodeName+'></'+cXMLRootNodeName+'>'); XMLDocument.SaveToFile; end; try XMLDocument.Active := true; except ShowMessage('XML Fehler: Die Datei "'+XMLFilename+'" ist fehlerhaft.'); Result := false; end; //Des sind die verschiedenen Möglichkeiten die ich getestet hab 1. ShowMessage(XMLDocument.DocumentElement.NodeName); //Hier bleibt er einfach stehen 2. ShowMessage(XMLDocument.Node.ChildNodes.Last.NodeName);//hier funktionierts ABER bei dem bleibt er bei FreeAndNil(XMLDocument); dann hängen 3. ShowMessage(XMLDocument.ChildNodes.Last.NodeName);//hier funktionierts auch bleibt aber wieder hier FreeAndNil(XMLDocument); hängen finally FreeAndNil(XMLDocument); end; except ShowMessage('XML Fehler: Fehler beim Laden des XML Documents'); Result := false; end; end; Ich will den Root Knoten bekommen als Variable heraus bekommen ... nur so nebenbei |
Re: Beim XML laden bleibt die Anwendung einfach hängen
könntest du mal die xml datei anhängen?
oder stellt das ein problem dar? ich hab da mal vor ner weile ein kleines xml check tool geschrieben. kann ich da ja mal durchjagen.... |
Re: Beim XML laden bleibt die Anwendung einfach hängen
Ist absolute kein Problem
aber ich glaub nicht des da dein Check tool so viel findet
XML-Code:
<?xml version="1.0"?>
<List></List> |
Re: Beim XML laden bleibt die Anwendung einfach hängen
puuhhhh: dein code ist ein wenig chaotisch....
Delphi-Quellcode:
dein code:
XMLDocument.NodeIndentStr := '<2 Leerzeichen>'; // ist für das Auslesen unrelevant, benötigts du doch erst beim Erstellen
XMLDocument.FileName := XMLFilename; if (not(FileExists(XMLFilename))) or {OK} (XMLDocument.IsEmptyDoc) then { IsEmptyDoc kann man doch erst nach einem LoadFromFile oder derartiges aufrufen?!} begin XMLDocument.LoadFromXML('<?xml version="1.0"?><'+cXMLRootNodeName+'></'+cXMLRootNodeName+'>'); XMLDocument.SaveToFile; end;
Delphi-Quellcode:
--> sollte so aussehen:try XMLDocument.Active := true; except ShowMessage('XML Fehler: Die Datei "'+XMLFilename+'" ist fehlerhaft.'); Result := false; end; //Des sind die verschiedenen Möglichkeiten die ich getestet hab 1. Möglichkeit 2. Möglichkeit 3. Möglichkeit
Delphi-Quellcode:
Weil wenn bei dir da was fehlschlägt, try XMLDocument.Active := true; { hier fehlt meines Erachtens nach das Laden des XML Files } //Des sind die verschiedenen Möglichkeiten die ich getestet hab 1. Möglichkeit oder 2. Möglichkeit oder 3. Möglichkeit except ShowMessage('XML Fehler: Die Datei "'+XMLFilename+'" ist fehlerhaft.'); Result := false; end; dann macht er ja trotzdem weiter mit deinen Möglichkeiten. |
Re: Beim XML laden bleibt die Anwendung einfach hängen
Zitat:
IsEmptyDoc ist auch weg dein code:
Delphi-Quellcode:
Weil wenn bei dir da was fehlschlägt, try XMLDocument.Active := true; except ShowMessage('XML Fehler: Die Datei "'+XMLFilename+'" ist fehlerhaft.'); Result := false; exit; end; //Des sind die verschiedenen Möglichkeiten die ich getestet hab 1. Möglichkeit 2. Möglichkeit 3. Möglichkeit dann macht er ja trotzdem weiter mit deinen Möglichkeiten.[/quote] nein ich hab nur vergessen nach dem ersten except block ein exit aufzurufen (weil ich des früher anderes gemacht hab) Aber des Problem das er einfach stecken bleibt ist immer noch da :wall: |
Re: Beim XML laden bleibt die Anwendung einfach hängen
kannst du deine xml_tlb.pas mal anhängen? habe hier msxml 6.0 importiert....
|
Re: Beim XML laden bleibt die Anwendung einfach hängen
Also ich nutze diese units
Delphi-Quellcode:
uses xmldom, XMLIntf, msxmldom, XMLDoc
|
Re: Beim XML laden bleibt die Anwendung einfach hängen
ShowMessage(XMLDocument.DocumentElement. NodeName);
--> hier bekomme ich als ShowMessageDialog den String 'List' angezeigt ShowMessage(XMLDocument.Node.ChildNodes.Last.NodeN ame); --> es existieren keine Childnodes in deinem XML Dokument! ShowMessage(XMLDocument.ChildNodes.Last.NodeName); --> es existieren keine Childnodes in deinem XML Dokument! |
Re: Beim XML laden bleibt die Anwendung einfach hängen
hmm ja
aber wenn ich ShowMessage(XMLDocument.DocumentElement.NodeName); aufrufe dann bleibt er einfach in der zeile hängen |
Re: Beim XML laden bleibt die Anwendung einfach hängen
sicher?
vielleicht ist der dialog einfach nur in den hintergrund gerutscht? dann schaut es so aus als wenn nix mehr geht... |
Re: Beim XML laden bleibt die Anwendung einfach hängen
Zitat:
|
Re: Beim XML laden bleibt die Anwendung einfach hängen
Zitat:
selbst wenn ich nur XMLDocument.DocumentElement.NodeName; aufrufe bleibt er hängen Zitat:
funkt ohne debugger auch nicht |
Re: Beim XML laden bleibt die Anwendung einfach hängen
oder ruf einfahc die erzeugte EXE auf....
|
Re: Beim XML laden bleibt die Anwendung einfach hängen
Zitat:
|
Re: Beim XML laden bleibt die Anwendung einfach hängen
Hallo ihr beiden,
das Code-Gerüst sollte besser so aussehen:
Delphi-Quellcode:
Achtet auf den Typ der lokalen Variable xDoc. Ein Einfrieren des Programms kann ich mir so nicht vorstellen.
function XML_Load(fn: TFileName; vst: TVirtualStringTree): Boolean;
var xDoc: IXMLDocument; begin xDoc := LoadXmlDocument(fn); with xDoc do try Active := True; ShowMessage(documentElement.NodeName); { ... } Result := True; except Result := False; end; end; Grüße vom marabu |
Re: Beim XML laden bleibt die Anwendung einfach hängen
hmm wenn ich das objekt so
XMLDocument := LoadXMLDocument(XMLFilename); erstelle dann geht es sogar ... es gibt dann nur ziemlich viele speicherleaks :( aber ich versteh nicht warum ich des objekt nicht so erstellen kann XMLDocument := TXMLDocument.Create(nil); |
Re: Beim XML laden bleibt die Anwendung einfach hängen
Hallo Alex,
da gibt es ein kleines Problem mit Borlands Implementierung dieser Methode, das erzeugte VCL-Objekt TXMLDocument wird so nie freigegeben. Also besser so:
Delphi-Quellcode:
Freundliche Grüße
function XML_Load(fn: TFileName; vst: TVirtualStringTree): Boolean;
var xDoc: TXMLDocument; begin xDoc := TXMLDocument.Create(Application); with xDoc do try try FileName := fn; Active := True; ShowMessage(documentElement.NodeName); { ... } Result := True; except Result := False; end; finally Free; end; end; |
Re: Beim XML laden bleibt die Anwendung einfach hängen
Hab den Fehler gefunden
So gehts nicht: XMLDocument := TXMLDocument.Create(nil); So gehts: XMLDocument := TXMLDocument.Create(Application); Danke leute :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz