AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi 2 Mal ChildNodes lesen = Zugriffsverletzung?
Thema durchsuchen
Ansicht
Themen-Optionen

2 Mal ChildNodes lesen = Zugriffsverletzung?

Ein Thema von Hedge · begonnen am 18. Nov 2009 · letzter Beitrag vom 18. Nov 2009
Antwort Antwort
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#1

2 Mal ChildNodes lesen = Zugriffsverletzung?

  Alt 18. Nov 2009, 13:03
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.
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?

  Alt 18. Nov 2009, 14:38
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
Heiko
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#3

Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?

  Alt 18. Nov 2009, 14:54
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>
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#4

Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?

  Alt 18. Nov 2009, 15:04
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#5

Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?

  Alt 18. Nov 2009, 15:09
Wie greift man dann direkt auf ein Child zu anhand dessen Namen?
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.166 Beiträge
 
Delphi 12 Athens
 
#6

Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?

  Alt 18. Nov 2009, 15:13
Ich komm mit diesem komischen MS-Ding och nicht ganz klar. (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);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#7

Re: 2 Mal ChildNodes lesen = Zugriffsverletzung?

  Alt 18. Nov 2009, 15:25
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.
٩๏̯͡๏)۶
  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 09:08 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