Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi TXMLDocument: Problem bei LoadFromFile (https://www.delphipraxis.net/118942-txmldocument-problem-bei-loadfromfile.html)

Angel4585 18. Aug 2008 12:17


TXMLDocument: Problem bei LoadFromFile
 
Hallo,

ich möchte ne Klasse mit SaveToFile und LoadFromFile Methoden schreiben.

Die SaveToFile habe ich:

Delphi-Quellcode:
procedure SaveToFile(AFile: string);
var
  i : integer;
begin
  with TXMLDocument.Create(Application) do
    try
      Active:=True;
      Options:=[doNodeAutoIndent];
      with AddChild('List') do
        begin
        AddChild('Datum').Text:=DateTimeToStr(Now);
        for i :=0 to Pred(Self.Count)do
          begin
          with AddChild('Item') do
            begin
            AddChild('User').Text:=Items[i].FUser;
            AddChild('Password').Text:=Items[i].FPassword;
            end;
          end;
        end;
      SaveToFile(AFile);
    finally
      //TODO:XMLDokument freigeben ? FEHLER!
    end;
end;
Damit bekomm ich zB folgendes Ergebnis:
XML-Code:
<List>
  <Datum>18.08.2008 12:52:37</Datum>
  <Item>
    <User>Benutzer</User>
    <Password>Password</Password>
  </Item>
  <Item>
    <User>Benutzer2</User>
    <Password>Password2</Password>
  </Item>
</List>
Keine Kopfzeile wie ich Sie aus andern XML-Files kenne :gruebel:

Beim Laden gibts jetz aber ne Menge Probleme. Bzw erstmal eins:

Delphi-Quellcode:
procedure LoadFromFile(AFile: string);
var
  i : integer;
  lxml : TXMLDocument;
  cn : IXMLNode;
begin
Self.Clear;
lxml := TXMLDocument.Create(Application);
with lxml do
  try            
    Options:=Options + [doNodeAutoIndent];
    LoadFromFile(AFile);
    cn:=ChildNodes[0];//Was genau muss ich hier laden? Habs mit Node und ChildNodes[0] probiert
      for i :=0 to Pred(cn.ChildNodes.Count)do //Es wird mir angezeigt das 1 Item existiert, sollten aber 2 sein?
        begin
        if(cn.ChildNodes.Nodes[i].NodeName = 'AutoItem')then //Zugriffsverletzung bei Adresse 0
          begin
          with TMyListItem.Create(self) do
            begin
            FUser:=    cn.ChildNodes[i].ChildValues['User'];
            FPassword:= cn.ChildNodes[i].ChildValues['Password'];
            end;
          end;
        end;
  finally
    //TODO: XMLDokument freigeben? FEHLER!
  end;
end;
Also was mache ich da beim Einlesen falsch?

Edit:

Wenn ich anstatt

cn:=ChildNodes[0];


nur

cn:=DocumentElement;

schreibe dann gehts.
Aber: Wenn ich im Debugmodus mitm Mauszeiger über NodeName(=> cn.ChildNodes.Nodes[i].NodeName) gehe wird mir eine Zugriffsverletzung angezeigt. trotzdem scheint er die NodeNamen einlesen zu konnen. sehr komisch das Ganze :gruebel:

Brainshock 18. Aug 2008 14:42

Re: TXMLDocument: Problem bei LoadFromFile
 
Nimm mal statt TXMLDocument -> IXMLDocument.

Angel4585 18. Aug 2008 14:51

Re: TXMLDocument: Problem bei LoadFromFile
 
Naja es geht ja mittlerweile, auch mit TXMLDocument. Aber das im Debugmodus ist mir doch ein Rätsel.


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