C# XML mittels InsertAfter ergänzen

Fruchttiger

Lt. Junior Grade
Registriert
Aug. 2006
Beiträge
316
Hallöchen,

ich bin dabei eine kleine Windows Anwendung zu schreiben die mehrere Werte in eine XML schreiben soll. Klappt soweit ganz gut allerdings ist es mir nur möglich einen Datensatz zu schreiben. Füge ich einen Zweiten hinzu wird das Dokument überschrieben. Ich habe versucht dies mittels if (doc != null) dann XmlNode..::.InsertAfter-Methode zu lösen aber so einfach wie es sich zuerst angehört hat ist es scheinbar doch nicht. (Bin erst seit 2 Wochen dabei C# zu lernen :p)
Mit der Anleitung im msdn steh ich komplett im Wald :freak:

Hier mein bisheriger Code

Code:
            string title = textBox_titel.Text;
            string release = textBox_release.Text;
            string lines = textBox_lines.Text;
            string language = textBox_language.Text;
            
            XmlDocument doc = new XmlDocument();
           
            XmlTextWriter writer = new XmlTextWriter("Import.xml", System.Text.Encoding.UTF8);
            writer.Formatting = Formatting.Indented;

            writer.WriteStartDocument();
            writer.WriteStartElement("film");
            writer.WriteElementString("titel", title);
            writer.WriteElementString("erscheinungsjahr", release);
            writer.WriteElementString("bildzeilen", lines);
            writer.WriteElementString("sprache", language);

            writer.WriteEndElement();

            writer.Flush();
            writer.Close();

            textBox_titel.Text = "";
            textBox_release.Text = "";
            textBox_lines.Text = "";
            textBox_language.Text = "";

Meine XML hat somit folgende Struktur:

Code:
<?xml version="1.0" encoding="utf-8"?>
<film>
  <titel>Filmtitel</titel>
  <erscheinungsjahr>1999</erscheinungsjahr>
  <bildzeilen>480</bildzeilen>
  <sprache>deutsch</sprache>
</film>

Ich möchte natürlich den nächsten Knoten hinter </film> schreiben. ("film" muss hierfür nicht mit einem Attribut versehen werden da später ein php script zum auslesen verwendet wird welches lediglich die film end-tags benötigt.)

Wär jemand so freundlich und hilft dem noob? :)
 
Benutz nen Filestream zum schreiben, dann hast du mehr Möglichkeiten:

PHP:
            FileStream stream;
            XmlTextWriter writer;

            if (File.Exists("Import.xml"))
            {
                stream = new FileStream("Import.xml", FileMode.Append);
                writer = new XmlTextWriter(stream, Encoding.UTF8);
            }
            else
            {
                stream = new FileStream("Import.xml", FileMode.CreateNew);
                writer = new XmlTextWriter(stream, Encoding.UTF8);
                writer.WriteStartDocument();
            }

            writer.Formatting = Formatting.Indented;

            writer.WriteWhitespace(Environment.NewLine);
            writer.WriteStartElement("film");
            writer.WriteElementString("titel", "title");
            writer.WriteElementString("erscheinungsjahr", "release");
            writer.WriteElementString("bildzeilen", "lines");
            writer.WriteElementString("sprache", "language");

            writer.WriteEndElement();

            writer.Flush();
            writer.Close();
 
super!! ich hab gestern bestimmt 3 stunden draufgestarrt aber auf sowas wär ich dann sicher nicht gekommen :) dank dir!

p.s. ich musste noch für WriteElementString die "" entfernen weil ich dort den string übergebe aber das hab ich noch alleine hinbekommen :p
 
noch einfacher geht es wenn du aus deinem XML eine Classe machst.

Das geht sehr gut mit der XSD.exe (Nicht verunsichern lassen das das was von 1.1 steht) ;

Du erzeugst zuerst ein XSD mit der exe, dann mit dem XSD die Classe..

Mit der Klasse kannst du ganz einfach dein XML de-/serializieren. Neue elemente erzeugen .....

Oli
 

Ähnliche Themen

Zurück
Oben