Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Neuen Knoten einfügen (https://www.delphipraxis.net/42318-neuen-knoten-einfuegen.html)

tobu 17. Mär 2005 08:13


Neuen Knoten einfügen
 
Hallo ich habe ein Problem mit dem Einfügen einese Knotens in ein bestehendes XML-Document. Ich habe folgenden Code geschrieben und benutzte Delphi 7:
Delphi-Quellcode:
procedure TForm1.BSpeichernClick(Sender: TObject);
  var
  NewScript: IXMLNode;
  ValueScript: IXMLNode;
begin
  NewScript := XMLDocument1.DocumentElement.AddChild('Script');

  //Erstellen der Attribute
  if CBDBTyp.ItemIndex = 0 then
     NewScript.Attributes['DB-Typ'] := 'SQL-Server'
  else
    NewScript.Attributes['DB-Type'] := 'Oracle';

  NewScript.Attributes['Nummer'] := ENummer.Text;

  if CBAuthor.ItemIndex = 0 then
    NewScript.Attributes['Author'] := 'CD';
  if CBAuthor.ItemIndex = 1 then
    NewScript.Attributes['Author'] := 'FV';
  if CBAuthor.ItemIndex = 2 then
    NewScript.Attributes['Author'] := 'JSP';

  //Erstellen der Elemente
  ValueScript := NewScript.AddChild('Beschreibung');
  ValueScript.Text := MBeschreibung.Text;
  ValueScript := NewScript.AddChild('Befehl');
  ValueScript.Text := MSQL.text;

end;
Das Problem ist, ich bekomme keine Fehlermeldung beim ausführen. Aber in dem XML-Document wird kein Knoten eingefügt.
Hat vieleicht jemand eine Idee woran das liegen könnte?

jim_raynor 17. Mär 2005 08:22

Re: Neuen Knoten einfügen
 
Ich kenne mich damit nicht so aber, aber muss man das XML-Dokument nicht auch speichern?

tobu 17. Mär 2005 08:27

Re: Neuen Knoten einfügen
 
Du meinst, es wird erst in das Document geschrieben, wenn ich expliziert speichere. Das wäre möglich ich probiere es mal aus. Danke für den Tip.

tobu 17. Mär 2005 09:14

Re: Neuen Knoten einfügen
 
Ich habe jetzt den Code wie folgt abgeändert.
Delphi-Quellcode:
procedure TForm1.BSpeichernClick(Sender: TObject);
  var
  NewScript: IXMLNode;
  ValueScript: IXMLNode;
begin
  XMLDocument1.LoadFromFile(FileName);
  NewScript := XMLDocument1.DocumentElement.AddChild('Script');

  //Erstellen der Attribute
  if CBDBTyp.ItemIndex = 0 then
     NewScript.Attributes['DB-Typ'] := 'SQL-Server'
  else
    NewScript.Attributes['DB-Type'] := 'Oracle';

  NewScript.Attributes['Nummer'] := ENummer.Text;

  if CBAuthor.ItemIndex = 0 then
    NewScript.Attributes['Author'] := 'CD';
  if CBAuthor.ItemIndex = 1 then
    NewScript.Attributes['Author'] := 'FV';
  if CBAuthor.ItemIndex = 2 then
    NewScript.Attributes['Author'] := 'JSP';

  //Erstellen der Elemente
  ValueScript := NewScript.AddChild('Beschreibung');
  ValueScript.Text := MBeschreibung.Text;
  ValueScript := NewScript.AddChild('Befehl');
  ValueScript.Text := MSQL.text;
  XMLDocument1.SaveToFile(FileName);
end;
Jetzt bekomme ich aber eine Fehlermeldung Exception der Klasse EDOMParserError. Ich gehe mal davon aus das die XML-Datei fehlerhaft ist, aber im Browser wird sie richtig dargestellt.

tobu 17. Mär 2005 10:00

Re: Neuen Knoten einfügen
 
Hallo der oben beschriebenen Code funktioniert. Ich hatte einen Zeichendreher in meinem FileName.
Machmal sind es einfach die Flüchtigkeitsfehler die einen aufhalten.
In diesem Sinne...

MathiasSimmack 17. Mär 2005 10:55

Re: Neuen Knoten einfügen
 
Schön, aber mach dir trotzdem mal Gedanken über diese Stelle:
Zitat:

Zitat von tobu
Delphi-Quellcode:
  if CBAuthor.ItemIndex = 0 then
    NewScript.Attributes['Author'] := 'CD';
  if CBAuthor.ItemIndex = 1 then
    NewScript.Attributes['Author'] := 'FV';
  if CBAuthor.ItemIndex = 2 then
    NewScript.Attributes['Author'] := 'JSP';

Das kriegst du doch besser hin, oder? :)

tobu 17. Mär 2005 14:23

Re: Neuen Knoten einfügen
 
Das war ja nur ein Prototype :-D ich habe jetzt anders gemacht.
Delphi-Quellcode:
 case CBAuthor.ItemIndex of
  0: NewScript.Attributes['Author'] := 'CD';
  1: NewScript.Attributes['Author'] := 'FV';
  2: NewScript.Attributes['Author'] := 'JSP';
  end;

MathiasSimmack 17. Mär 2005 14:42

Re: Neuen Knoten einfügen
 
Mit einem
Delphi-Quellcode:
array[0..2]of string[?]
ginge es in einer Zeile. ;) Aber was steht denn in dieser ComboBox (CBAuthor) drin? Kannst du das nicht direkt verwenden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 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