Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi 2 Mal ChildNodes lesen = Zugriffsverletzung? (https://www.delphipraxis.net/143570-2-mal-childnodes-lesen-%3D-zugriffsverletzung.html)

Hedge 18. Nov 2009 13:03


2 Mal ChildNodes lesen = Zugriffsverletzung?
 
Ich versuche aus einer XML-Datei zu lesen die ich zuvor geschrieben habe.

Delphi-Quellcode:
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);
In der vorletzten Zeile tritt eine Zugriffsverletzung bei Adresse 0000000 auf.

Wenn ich das Language:=Root.ChildNodes['language']; auskommentiere, funktioniert alles jedoch so wie es soll.

Was mache ich falsch.

hoika 18. Nov 2009 14:38

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

Hedge 18. Nov 2009 14:54

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>

himitsu 18. Nov 2009 15:04

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.

Hedge 18. Nov 2009 15:09

Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?
 
Wie greift man dann direkt auf ein Child zu anhand dessen Namen?

himitsu 18. Nov 2009 15:13

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);

Hedge 18. Nov 2009 15:25

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