![]() |
Ersetzen einen Knotens
Hallo ich will in meinem XML-Dokument einen Konten ersetzten das XML sieht ungefähr so aus:
Delphi-Quellcode:
Indem Xml-Dokument gibt es mehrere Script-Knoten. Ich suche nach einer bestimmten Nummer und will dann bei diesem Knoten Beschreibung und Befehl
<script nummer="lfd Nummer" author="Author">
<Beschreibung>Das ist die Beschreibung</Beschreibung> <Befehl>Das ist der Befehl</Befehl> </script> ändern. Ich habe das ungefähr so gedacht:
Delphi-Quellcode:
Leider funtioniert dies nicht. Kann mir vieleicht jemand helfen?
procedure TForm1.KnotenErsetzen(Knoten: IXMLNode);
begin XMLDoc.LoadFromFile(XMLDoc.FileName); Knoten.Attributes['Nummer'] := ENummer.Text; case CBAuthor.ItemIndex of 0: Knoten.Attributes['Author'] := CBAuthor.Items.Strings[0]; 1: Knoten.Attributes['Author'] := CBAuthor.Items.Strings[1]; 2: Knoten.Attributes['Author'] := CBAuthor.Items.Strings[2]; end; Knoten.ChildValues['Beschreibung'] := RBeschreibung.Text; Knoten.ChildValues['Befehl'] := RBefehl.Text; //Einrücken und speichern im XML-Document XMLDoc.Options := [doNodeAutoIndent]; XMLDoc.SaveToFile(XMLDoc.FileName); end; |
Re: Ersetzen einen Knotens
So ganz zu Herzen genommen hattest du dir meine
![]() Zitat:
Delphi-Quellcode:
Diese eine Zeile macht genau das gleiche wie deine case-Anweisung. :zwinker:
Knoten.Attributes['Author'] := CBAuthor.Items[CBAuthor.ItemIndex];
Dass es übrigens nicht funktioniert, liegt daran: Zitat:
Ich nehme mal an, dass du die XML-Datei schon beim Start deines Programms lädst. In dem Fall enthält XMLDoc das Dokument. Wenn du jetzt den Knoten in der o.g. Prozedur änderst, dann ändert sich dadurch der entsprechende Knoten im schon geladenen Dokument - sofern er vorher auf irgendeine Art und Weise aus diesem Dokument ermittelt wurde ( ![]() |
Re: Ersetzen einen Knotens
Ok, ich habe die Switch-Anweisung aus dem Code genommen. :roll:
Ich habe den Code jetzt wie foglt abgeändert:
Delphi-Quellcode:
Den Konten ermittele ich duch eine Suche
procedure TForm1.KnotenErsetzen(Knoten: IXMLNode);
begin Knoten.Attributes['Nummer'] := ENummer.Text; Knoten.Attributes['Author'] := CBAuthor.Items[CBAuthor.ItemIndex]; Knoten.ChildValues['Beschreibung'] := RBeschreibung.Text; Knoten.ChildValues['Befehl'] := RBefehl.Text; //Einrücken und speichern im XML-Document XMLDoc.Options := [doNodeAutoIndent]; XMLDoc.SaveToFile(XMLDoc.FileName); end;
Delphi-Quellcode:
Leider wurde mein geänderter Konten nicht in das XML-Dokument geschrieben.
//Suchen des Knotens mit der gleichen Nummer
for i := 0 to SQLDatei.Count-1 do begin knoten := SQLDatei.Nodes[i]; if (IntToStr(knoten.Attributes['Nummer']) = ENummer.Text) then begin Result := i; //Gefundenen Knoten zurückgeben break; end else Result := -1;//Kein Knoten gefunden end; KnotenErsetzen(SQLDatei.Nodes[Result]) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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