![]() |
Problem beim Schreiben/Lesen mit "doNodeAutoIdent"
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Versuche mich derzeit in XML einzuarbeiten. Die ersten Tests klappten bisher auch ganz gut. Ich verwende die Komponente TXMLDocument, die bei Delphi standardmäßig mit dabei ist. Leider war die Ausgabe-XML-Datei nicht formatiert, darum habe ich "doNodeAutoIdent" auf true gesetz. Jedoch habe ich nun Probleme mit dem Auslesen der XML Datei, nachdem(!) ich etwas hineingeschrieben habe. Speicher ich die XML-Datei und lade sie nochmal neu, dann klappt es wieder ohne Probleme. Meine Vorgehensweise kurz erläutert: In meiner XML Datei befinden sich beliebig viele Nodes mit dem Namen "<person>". Diese sind in weitere einzelne Punkte Unterteilt, in dem Demoprojekt nur "vorname". In meinem Programm lass ich die Vornamen in einer Listbox anzeigen, indem ich mit einer for-Schleife alle Einträge druchgehe. Das klappt auch ganz Problemlos. Wenn ich einen Eintrag hinzufüge (doNodeAutoIdent=false) und danach wieder einlesen möchte klappt diese ohne Probleme. Sobald doNodeAutoIdent=true ist, wird beim darauffolgendem Auslesen ein FEhler ausgegeben: Zitat:
Delphi-Quellcode:
Wenn ich vor dem Einlesen "XMLDocument1.Active:= false; XMLDocument1.Active:= true;" schreibe, tritt der Fehler nicht mehr auf.
[...]
var Form1: TForm1; savepath: String; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin //EINTRAG HINZUFÜGEN XMLDocument1.DocumentElement.AddChild('person').AddChild('vorname').Text:= edit1.Text; Showmessage('Eintrag hinzugefügt, jetzt auf "LESEN" klicken'); end; procedure TForm1.Button2Click(Sender: TObject); var i: Integer; begin //EINLESEN memo1.Lines:= XMLDocument1.XML; Listbox1.Items.BeginUpdate; try Listbox1.Clear; for i := 0 to XMLDocument1.DocumentElement.ChildNodes.Count - 1 do Listbox1.Items.Add(XMLDocument1.DocumentElement.ChildNodes[i].ChildNodes['vorname'].Text); finally Listbox1.Items.EndUpdate; end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin try XMLDocument1.SaveToFile(savepath); except Showmessage('Fehler beim Speichern!'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin savepath:= ExtractFilePath(ParamStr(0)) + 'test_db.xml'; if fileexists(savepath) then XMLDocument1.LoadFromFile(savepath) else begin XMLDocument1.Create(savepath); end; XMLDocument1.Active:= true; end; end. Dieses "Workaround" gefällt mir aber nicht besonders und suche deshalb nach einer anständigen Lösung. Hoffe ihr könnt mir helfen. Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 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