AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ersetzen einen Knotens

Ein Thema von tobu · begonnen am 22. Mär 2005 · letzter Beitrag vom 22. Mär 2005
Antwort Antwort
tobu

Registriert seit: 16. Mär 2005
22 Beiträge
 
Delphi 2006 Enterprise
 
#1

Ersetzen einen Knotens

  Alt 22. Mär 2005, 09:58
Hallo ich will in meinem XML-Dokument einen Konten ersetzten das XML sieht ungefähr so aus:
Delphi-Quellcode:
<script nummer="lfd Nummer" author="Author">
      <Beschreibung>Das ist die Beschreibung</Beschreibung>
      <Befehl>Das ist der Befehl</Befehl>
</script>
Indem Xml-Dokument gibt es mehrere Script-Knoten. Ich suche nach einer bestimmten Nummer und will dann bei diesem Knoten Beschreibung und Befehl
ändern.
Ich habe das ungefähr so gedacht:
Delphi-Quellcode:
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;
Leider funtioniert dies nicht. Kann mir vieleicht jemand helfen?
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: Ersetzen einen Knotens

  Alt 22. Mär 2005, 11:24
So ganz zu Herzen genommen hattest du dir meine Kritik damals nicht, was? Warum
Zitat von tobu:
Delphi-Quellcode:
  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;
und nicht gleich:
Knoten.Attributes['Author'] := CBAuthor.Items[CBAuthor.ItemIndex]; Diese eine Zeile macht genau das gleiche wie deine case-Anweisung.


Dass es übrigens nicht funktioniert, liegt daran:
Zitat:
Delphi-Quellcode:
XMLDoc.LoadFromFile(XMLDoc.FileName);

XMLDoc.Options := [doNodeAutoIndent];
XMLDoc.SaveToFile(XMLDoc.FileName);
Dass da noch was dazwischen steht, interessiert nicht, weil es keinen Einfluss auf das Dokument hat, das du hier komplett neu lädst. Du musst folgendes überlegen: Du änderst zwar die Eigenschaften des Knotens, aber wo ist dabei die Verbindung zu XMLDoc?

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 (Hier im Forum suchenXPath?). Wenn das alles zutrifft, dann brauchst du das Dokument nicht neu laden. Speichere es einfach, und die Datei sollte die neuen Eigenschaften enthalten.
  Mit Zitat antworten Zitat
tobu

Registriert seit: 16. Mär 2005
22 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Ersetzen einen Knotens

  Alt 22. Mär 2005, 11:52
Ok, ich habe die Switch-Anweisung aus dem Code genommen.

Ich habe den Code jetzt wie foglt abgeändert:
Delphi-Quellcode:
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;
Den Konten ermittele ich duch eine Suche
Delphi-Quellcode:
//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])
Leider wurde mein geänderter Konten nicht in das XML-Dokument geschrieben.
  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 12:03 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