![]() |
ListView laden/speichern mit XML
Hallo,
ich hab mal zwei prodeduren programmiert, mit denen man eine ListView in eine XML-Datei speichern bzw. aus einer XML-Datei laden kann. Hier mal die Codes:
Delphi-Quellcode:
procedure ListView_speichern(AListView: TListView; Section: String; DateiName: TFileName);
var Anzahl_Zeilen : Integer; Anzahl_SubItems : Integer; Index_Image : Integer; i : Integer; j : Integer; Bool_Check : Boolean; Caption_Text : String; SubItem_Text : String; S : String; XML_Node : IXMLNode; FXMLDoc : TXMLDocument; begin with AListView do begin FXMLDoc := TXMLDocument.Create(Application); with FXMLDoc do begin If FileExists(DateiName) then LoadFromFile(DateiName) else AddChild(Section); Options := [doNodeAutoIndent]; Active := True; DocumentElement.ChildNodes.Clear; //Anzahl der Zeilen auslesen Anzahl_Zeilen := Items.Count; If not Assigned(XML_Node) then XML_Node := DocumentElement.AddChild('Items'); //Anzahl der Zeilen in die Datei schreiben XML_Node.Attributes['Count'] := IntToStr(Anzahl_Zeilen); //Anzahl der Zahlen größer 0? If Anzahl_Zeilen > 0 then for i := 1 to Anzahl_Zeilen do with Items[i - 1] do begin S := 'SubItems' + IntToStr(i); XML_Node := DocumentElement.AddChild(S); //Anzahl der SubItems auslesen Anzahl_SubItems := SubItems.Count; //Anzahl der SubItems in die Datei schreiben XML_Node.Attributes['Count'] := IntToStr(Anzahl_SubItems); //Index des Images auslesen Index_Image := ImageIndex; //Index des Images in die Datei schreiben XML_Node.Attributes['Index'] := IntToStr(Index_Image); //Caption auslesen Caption_Text := Caption; //Captions in die Datei schreiben XML_Node.Attributes['Caption'] := Caption_Text; If Anzahl_SubItems > 0 then for j := 0 to Pred(Anzahl_SubItems) do begin //SubItem auslesen SubItem_Text := SubItems[j]; //SubItem in die Datei schreiben XML_Node.Attributes['SubItem' + IntToStr(j)] := SubItem_Text; end; // Bool_Check := Items.Item[i - 1].Checked; // XML_Node.Attributes['CheckBox'] := BoolToStr(Bool_Check, true); end; SaveToFile(DateiName); end; end; end;
Delphi-Quellcode:
ich habe aber Probleme mit dem "DateiName" in den Codes.
procedure ListView_laden(AListView: TListView; Section: String; DateiName: TFileName);
var Anzahl_Zeilen : Integer; Anzahl_SubItems : Integer; Index_Image : Integer; i : Integer; j : Integer; Bool_Check : Boolean; Caption_Text : String; SubItem_Text : String; S : String; XML_Node : IXMLNode; FXMLDoc : TXMLDocument; begin with AListView do begin Items.Clear; If not FileExists(DateiName) then exit; FXMLDoc := TXMLDocument.Create(Application); with FXMLDoc do begin LoadFromFile(DateiName); Options := [doNodeAutoIndent]; Active := True; XML_Node := DocumentElement.ChildNodes.FindNode('Items'); S := 'Count'; If Assigned(XML_Node) and XML_Node.HasAttribute(S) then Anzahl_Zeilen := XML_Node.Attributes[S]; for i := 1 to Anzahl_Zeilen do with Items.Add do begin //Image-Index aus der Datei lesen S := 'Index'; If Assigned(XML_Node) and XML_Node.HasAttribute(S) then Index_Image := XML_Node.Attributes[S]; //Image-Index in die ListView schreiben ImageIndex := Index_Image; S := 'SubItems' + IntToStr(i); XML_Node := FXMLDoc.DocumentElement.ChildNodes.FindNode(S); //Caption aus der Datei lesen S := 'Caption'; If Assigned(XML_Node) and XML_Node.HasAttribute(S) then Caption_Text := XML_Node.Attributes[S]; //Caption in die ListView schreiben Caption := Caption_Text; //Anzahl der SubItems aus der Datei lesen S := 'Count'; If Assigned(XML_Node) and XML_Node.HasAttribute(S) then Anzahl_SubItems := XML_Node.Attributes[S]; If Anzahl_Subitems > 0 then for j := 0 to Pred(Anzahl_SubItems) do begin S := 'SubItem' + IntToStr(j); If Assigned(XML_Node) and XML_Node.HasAttribute(S) then SubItem_Text := XML_Node.Attributes[S]; Items[i - 1].SubItems.Add(SubItem_Text); end; //CheckBoxen aus Datei auslesen S := 'CheckBox'; If Assigned(XML_Node) and XML_Node.HasAttribute(S) then Bool_Check := XML_Node.Attributes[S]; //CheckBox-Zustand in die Datei schreiben Items.Item[i - 1].Checked := Bool_Check; end; end; end; end; Wenn ich dort einen Pfad wie z. B. "C:\Programme\test.xml" angebe, dann bekomme ich folgenden Fehler: Zitat:
Weiss jemand, was bei den Codes falsch ist? Würd nämlich gerne nen kompletten pfad angeben können. Merci im Vorraus! |
Re: ListView laden/speichern mit XML
Hallo Helmi,
selbstverständlich kannst du Pfadnamen an LoadFromFile() übergeben. An welcher Stelle genau in deinem Quelltext wird die Exception geworfen und was steht zu diesem Zeitpunkt in der angegebenen Datei? Grüße vom marabu |
Re: ListView laden/speichern mit XML
Hallo marabu,
Zitat:
Die Datei hat 0 Byte und hat folgenden "Inhalt": Zitat:
Delphi-Quellcode:
{ ... }
with FXMLDoc do begin LoadFromFile(DateiName); Options := [doNodeAutoIndent]; <===HIER Active := True; { ...} |
Re: ListView laden/speichern mit XML
Du solltest nicht versuchen, eine leere Datei zu laden. Beim MS-XML-Parser gibt es die Möglichkeit, mit "loadXML" fertigen Code zu übergeben (in solchen Fällen wie Datei leer oder nicht vorhanden). Gibt es bei dieser XML-Komponente, die du nutzt, sicher auch irgendwie.
|
Re: ListView laden/speichern mit XML
Ich könnte mich selbst in den Arsch beissen!
Zuvor hatte ich die ListView in eine Text-Datei gespeichert und diese Textdatei im OnCreate des Fensters erzeugt. Gestern ahb ich dann die Proceduren zum speichern/laden von ListViews von Text auf XML umgestellt aber vergessen, die Datei nicht mehr als Text-Datei erzeugen zu lassen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:04 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