AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Problem beim Schreiben/Lesen mit "doNodeAutoIdent"
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Schreiben/Lesen mit "doNodeAutoIdent"

Offene Frage von "---Bernhard---"
Ein Thema von ---Bernhard--- · begonnen am 26. Feb 2007
Antwort Antwort
Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#1

Problem beim Schreiben/Lesen mit "doNodeAutoIdent"

  Alt 26. Feb 2007, 19:54
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:
---------------------------
Project1
---------------------------
This operation can not be performed with a Node of type PCDATA.
---------------------------
OK
---------------------------
Hier mein Quellcode:
Delphi-Quellcode:
[...]

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.
Wenn ich vor dem Einlesen "XMLDocument1.Active:= false; XMLDocument1.Active:= true;" schreibe, tritt der Fehler nicht mehr auf.
Dieses "Workaround" gefällt mir aber nicht besonders und suche deshalb nach einer anständigen Lösung.


Hoffe ihr könnt mir helfen.

Bernhard
Angehängte Dateien
Dateityp: zip xml-problem_188.zip (273,8 KB, 2x aufgerufen)
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 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