![]() |
2 Mal ChildNodes lesen = Zugriffsverletzung?
Ich versuche aus einer XML-Datei zu lesen die ich zuvor geschrieben habe.
Delphi-Quellcode:
In der vorletzten Zeile tritt eine Zugriffsverletzung bei Adresse 0000000 auf.
procedure TMainForm.LoadSettings();
Var XML: TXMLDocument; Root,Language,WindowPosition: IXMLNode; begin XML:=TXMLDocument.Create(Application.MainForm); XML.Active:=true; XML.LoadFromFile(ExtractFilePath(Application.ExeName)+'settings.xml'); //Sprache setzen Root:=XML.DocumentElement; Language:=Root.ChildNodes['language']; //Fensterposition WindowPosition:=Root.ChildNodes['windowposition']; MainForm.Left:=StrToInt(WindowPosition.ChildNodes['x'].Text); MainForm.Top:=StrToInt(WindowPosition.ChildNodes['y'].Text); Wenn ich das Language:=Root.ChildNodes['language']; auskommentiere, funktioniert alles jedoch so wie es soll. Was mache ich falsch. |
Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?
Hallo,
WindowPosition.ChildNodes['x'] Das kann auch NIL sein, dann knallt es. Womit hast du denn das XML geschrieben, zeig doch mal die relevante Stelle im XML-Dokument. Heiko |
Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?
WindowPosition.HasChildNodes hat true geliefert.
Das XML-Dokument sieht so aus:
XML-Code:
<settings>
<language>English</language> <windowposition> <x>175</x> <y>175</y> </windowposition> </settings> |
Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?
Sicher, daß ChildNodes so stimmt?
Dieses sollte doch bestimmt eine Node-Liste zurückliefern und nicht den gewünschten Node selber. Und von dieser Liste willst du dann .Text auslesen, welches es da doch nicht geben sollte. |
Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?
Wie greift man dann direkt auf ein Child zu anhand dessen Namen?
|
Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?
Ich komm mit diesem komischen MS-Ding och nicht ganz klar. :oops: (drum schreib ich mir ja was Eigenes/Verständlicheres)
Was sagt denn die Autovervollständigung zu "WindowPosition." + Strg+Leertaste ? Da sollte sich hoffentlich irgendwas finden lassen. PS: Theoretisch sollte auch schon Root.ChildNodes['windowposition'] nur eine Liste und nicht den Node liefern. mal was zum Testen
Delphi-Quellcode:
Root,Language,WindowPosition, Node: IXMLNode;
begin ... //Fensterposition WindowPosition:=Root.ChildNodes['windowposition']; if not Assigned(WindowPosition) or not Supports(WindowPosition, IXMLNode) then Beep; Node := WindowPosition.ChildNodes['x']; if not Assigned(Node) or not Supports(Node, IXMLNode) then Beep; MainForm.Left:=StrToInt(WindowPosition.ChildNodes['x'].Text); |
Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?
Bei der Zeile: Node := WindowPosition.ChildNodes['x']; tritt dieses Mal die Zugriffsverletzung auf.
Ich schau mir am besten mal himXML an und wehe das ist nicht einfach und toll! EDIT: OK himXML ist einfach und toll und damit funktioniert alles wie am Schnürchen. TXMLDocument hat also ausgedient. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:23 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