Zitat von
mikenrw:
Großartige Hilfe. Außer Arroganz, steht hier nicht viel.
Tut mir leid, dass du das so auffasst. Aber ich habe dir die Fehler deines Codes gezeigt. Ich wusste nicht, dass ich dir auch das eigene Denken abnehmen soll. Wie dem auch sei, ich fasse noch mal zusammen:
Du erstellst eine
XML-Datei, indem du erst den Grundbaum inkl. erstem Knoten erzeugst. Und dann den zweiten, vermutlich den dritten, usw. Das ist zu umständlich. Wenn
ich mehrere gleiche Knoten in einer
XML-Datei speichern möchte und (aus welchen Gründen auch immer) keinen Wrapper/Serializer nutzen möchte, dann schreibe ich mir eine entsprechende Hilfsfunktion, der ich den Parentknoten und ggf. das
XML-Dokument übergebe. In der Art wie
Delphi-Quellcode:
function TBla.CreateXmlNode(ParentNode: IXMLDOMNode; XmlDoc: DomDocument;
Attr1Value, Attr2Value: string): IXMLDOMNode;
begin
// den gewünschten Knoten lokal erzeugen
Result := XmlDoc.CreateElement(...);
// ggf. Attribute und dergleichen erzeugen
{ ... }
// neuen Knoten ggf. gleich einhängen
ParentNode.AppendChild(Result);
end;
Das ist nur ein Beispiel. Ich behaupte jetzt einfach mal, dass du einen Knoten mit zwei Attributen erzeugst, und Grundlage für die Attribute (sprich: Values) sind die zwei Stringvariablen im Funktionskopf. Damit würde sich deine Schreibarbeit im Code schon mal enorm reduzieren. Mal angenommen, du hast den Grundcode der
XML-Datei bereits fertig, dann könnte das so aussehen:
Delphi-Quellcode:
self.CreateXmlNode(ConceptGrpNode, xmldoc, Edit1.Text, Edit2.Text);
self.CreateXmlNode(ConceptGrpNode, xmldoc, Edit3.Text, Edit4.Text);
{ ... }
Du siehst, was ich meine? Dieser Ansatz ließe sich noch weiter optimieren. Damit könntest du deinen Programmcode einfacher gestalten, ohne irgendwelche Wrapper oder Serializer zu nutzen. Aber wie bereits alzaimar schrieb, mit einem Wrapper (oder eben einem .NET-Serializer) lässt sich die Arbeit noch weiter vereinfachen.
Im Prinzip war dein größter Fehler (und das ist nicht böse gemeint!) einfach nur, dass du die Variable "node1" mehrfach verwendet und innerhalb von 5 Programmzeilen neu zugewiesen hast.
Natürlich landen die neuen Knoten dann an einer falschen Stelle. Zumindest für deinen Hauptknoten solltest du also eine eigene Variable nutzen, etwa wie ich im Beispiel mit "ConceptGrpNode". Allzu sparsam sollte man also auch nicht mit Variablen umgehen, wenn man etwas bestimmtes erreichen will.
Zitat:
Antworte nicht, wenn Du keine Lust hast.
Tue ich nicht mehr. Keine Sorge.