XML-Verarbeitung: Dateien schreiben

Um eine XML-Datei zu schreiben, benötigen wir die Klasse XmlWriter. Auch hier verwenden wir zur Objekterzeugung die statische Funktion Create(). Die Funktion ist überladen und wird normalerweise mit ein oder zwei Parametern aufgerufen. Dabei ist der erste Parameter der Dateiname. Der zweite Parameter ist ein Objekt, welches Einstellungen für den Schreib-Vorgang enthält. Hierfür benötigen wir die Klasse XmlWriterSettings.
Im Beispiel verwenden wir diese Klasse, um einige Einstellungen festzulegen. Mit den Eigenschaften Indent und IndentChars können wir die Einrückung in der Ziel-Datei steuern. Die Eigenschaft NewLineChars legt die Zeichenkette für den Zeilenumbruch fest (zumeist "
"). Wird Indent auf false gesetzt, werden untergeordnete Elemente nicht eingerückt und befinden sich immer am Zeilenanfang.
Nun aber zu den Funktionen der XmlWriter-Klasse. Am Anfang sollten wir die Funktion WriteStartDocument() aufrufen. Dadurch wird die XML-Deklaration in das Dokument geschrieben. Der Funktion wird ein bool-Wert als Parameter übergeben, welcher besagt, ob das standalone-Attribut in der XML-Deklaration auf yes oder no gesetzt werden soll. Über die Funktionen WriteStartElement() und WriteEndElement() können wir die Element-Tags in die Datei schreiben. Beiden Funktionen wird der Elementname als Parameter übergeben. Mit Hilfe der Funktion WriteAttributeString() können wir ein Attribut in das aktuelle Element schreiben. Hierfür werden der Funktion zwei Zeichenketten als Parameter übergeben: der Attributname und dessen Wert. Über die Funktion WriteString() ist es möglich, einen Text in die Datei zu schreiben. Mit Hilfe der Funktion WriteComment() können wir einen XML-Kommentar in die Ziel-Datei schreiben. Die Reihenfolge der Funktionsaufrufe erfolgt dabei chronologisch der Baumstruktur nach. Dabei bildet die Klasse das perfekte komplementäre Stück zum XmlReader. Wie auch beim XmlReader dürfen wir beim XmlWriter nicht vergessen, am Ende des Dateizugriffs die Datei zu schließen.

Program.cs

XmlWriter oXmlWriter = null;
XmlWriterSettings oXmlWriterSettings = new XmlWriterSettings();

try
{
	// Eigenschaften / Einstellungen festlegen
	oXmlWriterSettings.Indent = true;
	oXmlWriterSettings.IndentChars = "  ";
	oXmlWriterSettings.NewLineChars = "\r\n";

	oXmlWriter = XmlWriter.Create("test.xml", oXmlWriterSettings);

	// XML-Validierungs-Kopf
	oXmlWriter.WriteStartDocument(true);    // true = standalone="yes"

	// Wurzel-Element
	oXmlWriter.WriteStartElement("liste");

	// Kommentar
	oXmlWriter.WriteComment("Personen-Liste");

	// 1. Person in XML-Datei schreiben (mit Attributen und Text)
	oXmlWriter.WriteStartElement("person");
	oXmlWriter.WriteAttributeString("alter", "42");
	oXmlWriter.WriteAttributeString("geschlecht", "m");
	oXmlWriter.WriteString("Max Mustermann");
	oXmlWriter.WriteEndElement();

	// 2. Person in XML-Datei schreiben (mit Attributen und Text)
	oXmlWriter.WriteStartElement("person");
	oXmlWriter.WriteAttributeString("alter", "39");
	oXmlWriter.WriteAttributeString("geschlecht", "w");
	oXmlWriter.WriteString("Maria Musterfrau");
	oXmlWriter.WriteEndElement();

	// Wurzel-Element schließen
	oXmlWriter.WriteEndElement();

	Console.WriteLine("Die XML-Datei wurde geschrieben!");
}
catch (Exception ex)
{
	Console.WriteLine(ex.ToString());
}
finally
{
	// Daten in Datei schreiben und Stream schließen
	oXmlWriter.Close();
}

Console.ReadKey();

test.xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<liste>
  <!--Personen-Liste-->
  <person alter="42" geschlecht="m">Max Mustermann</person>
  <person alter="39" geschlecht="w">Maria Musterfrau</person>
</liste>
Download

LinksRechts