Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML: EAccessViolation, beim Laden eines Eintrags (https://www.delphipraxis.net/92250-xml-eaccessviolation-beim-laden-eines-eintrags.html)

zecke 16. Mai 2007 23:13


XML: EAccessViolation, beim Laden eines Eintrags
 
:hi:

Benutze nur die Standard-Komponente TXMLDocument (TurboDelphi schon dabei, von daher..).

Ich habe folgende XML-Datei:

Delphi-Quellcode:
<?xml version="1.0" encoding="ISO-8859-1"?>

<all_men>
 <spieler_001>
  <main_daten>
   <vorname>Rafael</vorname>
   <nachname>Nadal</nachname>
   <alter>20</alter>
   <geburtstag>03-06-1986</geburtstag>
   <land>Spanien</land>
   <groesse>185</groesse>
   <gewicht>85</gewicht>
   <profi>2001</profi>
   <spielhand>links</spielhand>
   <rueckhand>beidhändig</rueckhand>
   <belag>Sand</belag>
   <rang>2</rang>
   <rang2007>2</rang2007>
   <stil>Schneller Läufer mit sehr starker Vorhand</stil>
  </main_daten>
  <faehigkeiten>
   <schlagen>
    <vorhand>
     <kraft>94</kraft>
     <winkel>92</winkel>
     <kontrolle>94</kontrolle>
    </vorhand>
    <rueckhand>
     <kraft>85</kraft>
     <winkel>86</winkel>
     <kontrolle>89</kontrolle>
    </rueckhand>
   </schlagen>
  </faehigkeiten>
 </spieler_001>
</all_men>
Jetzt wollte ich den Vornamen einfach mal in ein Memo ausgeben lassen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 XMLDocument1.Active:=true;
 XMLDocument1.FileName:=(ExtractFilePath(ParamStr(0))+'test.xml');
 Memo1.Lines.Add(XMLDocument1.DocumentElement.ChildNodes['all_men'].ChildNodes['spieler_001'].ChildNodes['main_daten'].ChildNodes['vorname'].Text);
 XMLDocument1.Active:=false;
end;
Wenn ich dann den Button drücke, bekomme ich eine EAccessViolation. Die Datei existiert, der Pfad stimmt ebenfalls.

Wo ist hier der Fehler?

Keldorn 17. Mai 2007 08:01

Re: XML: EAccessViolation, beim Laden eines Eintrags
 
Hallo

active:=true muß hinter dem Setzen des Filenames stehen.

edit:
so gehts dann auch:
Delphi-Quellcode:
Memo1.Lines.Add(XMLDocument1.DocumentElement.ChildNodes['spieler_001'].ChildNodes['main_daten'].ChildNodes['vorname'].Text);
das
Delphi-Quellcode:
 ChildNodes['all_men'].
muß raus, da es der Stammknoten=documentelement ist (korrigiert mich bitte, wenns falsch erklärt ist, mit xml habe ich nicht allzuviel gemacht)


Mfg Frank

zecke 17. Mai 2007 11:56

Re: XML: EAccessViolation, beim Laden eines Eintrags
 
:hi:

Vielen Dank! Du hattest mit Allem vollkommen Recht :thumb:

Dieser Fehler mit Active... exakt den Selben machte ich schon bei den Indys.. das wird mein Lieblings-Logik-Fehler :wall: :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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