Einzelnen Beitrag anzeigen

Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

TXMLDocument: Problem bei LoadFromFile

  Alt 18. Aug 2008, 13:17
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

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
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat