![]() |
mehrere XML Dateien erstellen
Ich habe ein Problem beim erstellen einer XML-Datei.
Das ganze Thema XML ist für mich komplettes Neuland. Ich habe die Anforderung aus meiner Software mehrere XML-Dateien anzulegen mit immer dem gleichen Aufbau. Den Aufbau habe ich. Eine Datei kann ich auch Fehlerfrei erstellen. Wenn ich aber die gleiche Funktion noch einmal nutze um eine zweite Datei zu erstellen, bekomme ich eine Fehlermeldung: "Only one top level element is allowed in an XML document"
Delphi-Quellcode:
Bei dem ersten Durchgang füge ich dem XMLDocument1 mit AddChild ja ein top level element zu. Soweit ich weiß, darf man das nur einmal in einer XML Datei tun.
procedure TForm1.Button9Click(Sender: TObject);
var root :IXMLNode; node :IXMLNode; unterknoten :IXMLNode; cData :IDOMCDATASection; x, y :integer; begin if SaveDialog1.Execute then begin XMLDocument1.Active := true; XMLDocument1.Create(SaveDialog1.FileName); XMLDocument1.Version := '1.0'; XMLDocument1.Encoding := 'iso-8859-1'; root := XMLDocument1.AddChild('Baugruppe'); //<---- Hier tritt beim erstellen der zweiten XML-Datei ein Fehler auf! node := root.AddChild('Part-ID'); cData := XMLDocument1.DOMDocument.createCDATASection(LabeledEdit1.Text); node.DOMNode.appendChild(cData); node := root.AddChild('FA-ID'); node.Text := LabeledEdit2.Text; node := root.AddChild('Part-Nr'); node.Text := Vari.Pruefung.SoftwareVersion; node := root.AddChild('Strom'); node.Text := IntToStr(Vari.Pruefung.Strom); XMLDocument1.SaveToFile(SaveDialog1.FileName); end; end; Was muss ich tun, damit ich, wenn ich die nächste Datei erstellen will wieder diesen Eintrag machen kann? Muss ich das XMLDocument1 noch irgendwie schließen nach dem speichern? |
Re: mehrere XML Dateien erstellen
Hallo,
schau mal in der Hilfe nach, was XMLDocument1.Active := true; macht, ich tippe darauf, dass Dir ein XMLDocument1.Active := false; nach dem Speichern fehlt. |
Re: mehrere XML Dateien erstellen
Zitat:
|
Re: mehrere XML Dateien erstellen
Ich kenne die Komponente nicht, aber du musst wahrscheinlich den Inhalt wieder leeren/zurücksetzen.
|
Re: mehrere XML Dateien erstellen
Reinhardtinho hat Recht, es sieht so aus als sei bei deiner Komponente die Idee, für jede XML Datei eine eigene Komponente zu verwenden.
Da du im ersten Durchlauf ein Top-Level-Element erstellst "Baugruppe", und der Inhalt der Komponente nach dem Speichern nicht weiter verändert wird, crashed es beim zweiten Aufruf. Denn in der Komponente ist immer noch das Top-Level-Element "Baugruppe" vom ersten Mal vorhanden. Lösung ist das Leeren des XML-Baums in der Komponente, oder die XMLDocument-Instanzen dynamisch zu erzeugen. |
Re: mehrere XML Dateien erstellen
Hallo,
ist zwar nicht sehr schön, aber hinter dem Speichern einfach ein
Delphi-Quellcode:
einfügen, dann ist das XML wieder weg und kann neu aufgebaut werden.
XMLDocument1.XML.Clear;
|
Re: mehrere XML Dateien erstellen
Danke für die vielen Tipps.
Ich habe es mit XMLDocument1.XML.Clear versucht, aber es ist immer noch das gleiche Problem. Wenn jemand eine ganz andere Idee hat bin ich dafür auch dankbar. |
Re: mehrere XML Dateien erstellen
Zitat:
Delphi-Quellcode:
Und nun kann ich beim Klick auf den Button jedesmal ohne Fehlermeldung eine Datei erstellen.
procedure TForm1.Button9Click(Sender: TObject);
var root :IXMLNode; node :IXMLNode; unterknoten :IXMLNode; cData :IDOMCDATASection; x, y :integer; begin if SaveDialog1.Execute then begin XMLDocument1.Active := true; XMLDocument1.Create(SaveDialog1.FileName); XMLDocument1.Version := '1.0'; XMLDocument1.Encoding := 'iso-8859-1'; root := XMLDocument1.AddChild('Baugruppe'); node := root.AddChild('Part-ID'); cData := XMLDocument1.DOMDocument.createCDATASection(LabeledEdit1.Text); node.DOMNode.appendChild(cData); node := root.AddChild('FA-ID'); node.Text := LabeledEdit2.Text; node := root.AddChild('Part-Nr'); node.Text := Vari.Pruefung.SoftwareVersion; node := root.AddChild('Strom'); node.Text := IntToStr(Vari.Pruefung.Strom); XMLDocument1.SaveToFile(SaveDialog1.FileName); XMLDocument1.XML.Clear; end; end; |
Re: mehrere XML Dateien erstellen
Ich muss sagen, ich verstehe es auch nicht. Aber diesmal verstehe ich nicht, wieso das jetzt funktioniert.
Auf jeden Fall vielen Dank für die Tipps. Mit dem XML.Clear hat es dann doch noch geklappt. |
Re: mehrere XML Dateien erstellen
Hallo,
Zitat:
Durch AddChild, AppendChild ... wird eine XML-Struktur aufgebaut. Dies ist eine "baumähnliche" Struktur. XML selbst ist Text und dieser Text wird durch das Attribut XML (einer Stringliste) repräsentiert. Allem Anschein nach, kann man das XML auf zwei Wegen erstellen: Durch Aufbau der Baumstruktur oder durch das Erstellen von Text. Und es ist wohl so, dass das Löschen des, durch den Aufbau der Baumstruktur entstandenen, Textes auch diese Baumstruktur entfernt. Quasi: alle Wege führen nach Rom und mindestens zwei zum XML :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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