Der XmlTextWriter (Teil 1)
Die Extensible Markup Language (XML) ist schon lange ein Standard für einfache aber flexible Datenspeicherung. Die Einsatzmöglichkeiten von XML sind weit gestreut und auch im .NET-Framework kommt XML nicht zu kurz. Es gibt für XML Operation sogar einen eigenen Namespace:
using
System.Xml;
Es gibt mehrere
unterschiedliche Möglichkeiten, XML Dateien zu
erzeugen und einzulesen. In den nächsten Beispielen
werden wir einige kennenlernen. Der einfachste Weg
eine XML-Datei zu erzeugen, ist der XmlTextWriter.
Dieser erzeugt einen Stream, der in eine Datei
gespeichert werden kann.
XmlTextWriter
myXMLWriter = new XmlTextWriter
("test.xml",null);
Die Instanzierung
eines XmlTextWriter ist denkbar einfach, da man
hier schon den Namen der zu erstellenden Datei
angeben kann. Diese Datei wird mit der Kodierung
UTF8 geschrieben - eine Angabe die durchaus wichtig
ist, wenn man in der Datei Sonderzeichen oder
Umlaute benutzen will. Natürlich sind auch andere
Kodierungen möglich. Diese können alternativ
angegeben werden.
XmlTextWriter
myXMLWriter = new XmlTextWriter
("test.xml",Encoding.ASCII);
Außer in eine Datei
kann auch direkt auf die Konsole ausgegeben werden.
Die Angabe einer Kodierung ist dabei aber nicht
möglich.
XmlTextWriter
myXMLWriter = new
XmlTextWriter(Console.Out);
Damit ist der
XMLWriter angelegt. Ihn mit Leben zu füllen ist
nicht weiter schwierig.
myXMLWriter.WriteStartDocument(true);
Der Befehl
"WriteStartDocument" fügt dem Dokument die
XML-Deklaration mit der Versionsnummer "1.0" hinzu.
Der Parameter gibt an, ob das XML-Attribut
"standalone=yes" gesetzt wird. Sollte das
XML-Dokument weitere Dateien benötigen um
einwandfrei zu funktionieren, sollte das Attribut
"standalone=no" sein. Dies erreicht man durch den
Wert "false" als Parameter.
Wie auch in HTML bestehen XML-Dokumente aus öffnenden und schließenden Tags, zwischen denen sich die Informationen befinden. Diese Tags werden in XML "Knoten" oder "Nodes" genannt und können verschachtelt werden, um so auch komplexe Strukturen abzubilden. Will man aber nur einen einfachen Textwert schreiben, so genügt hier ein einzelner Befehl.
Wie auch in HTML bestehen XML-Dokumente aus öffnenden und schließenden Tags, zwischen denen sich die Informationen befinden. Diese Tags werden in XML "Knoten" oder "Nodes" genannt und können verschachtelt werden, um so auch komplexe Strukturen abzubilden. Will man aber nur einen einfachen Textwert schreiben, so genügt hier ein einzelner Befehl.
myXMLWriter.WriteElementString("Name",
"Muster");
myXMLWriter.WriteElementString("Vorname", "Max");
myXMLWriter.WriteElementString("Ort", "Dortmund");
myXMLWriter.WriteElementString("Vorname", "Max");
myXMLWriter.WriteElementString("Ort", "Dortmund");
Hier werden gleich
drei neue Knoten angelegt und mit passenden
Inhalten gefüllt. Natürlich ist es etwas
unübersichtlich auf diese Art eine Datei zu
erzeugen, die Daten von mehr als einer Person
enthält. In so einem Fall ist es sinnvoll, die
Personendaten in einem neuen Knoten
zusammenzufassen.
Um einen neuen Knoten zu öffnen, gibt es den Befehl "WriteStartElement" und "WriteEndElement", um ihn wieder zu schließen. In diesem Knoten kann nun ein Element stehen oder aber auch eine ganze Liste von Elementen, die auch wieder Unterknoten enthalten können.
Um einen neuen Knoten zu öffnen, gibt es den Befehl "WriteStartElement" und "WriteEndElement", um ihn wieder zu schließen. In diesem Knoten kann nun ein Element stehen oder aber auch eine ganze Liste von Elementen, die auch wieder Unterknoten enthalten können.
myXMLWriter.WriteStartElement("Person");
myXMLWriter.WriteElementString("Name", "Muster");
myXMLWriter.WriteElementString("Vorname", "Max");
myXMLWriter.WriteElementString("Ort", "Dortmund");
myXMLWriter.WriteEndElement();
myXMLWriter.WriteElementString("Name", "Muster");
myXMLWriter.WriteElementString("Vorname", "Max");
myXMLWriter.WriteElementString("Ort", "Dortmund");
myXMLWriter.WriteEndElement();
Wie man sieht, hat
"WriteStartElement" als Parameter den Namen des zu
erzeugenden Knotens, nämlich "Person". Hingegen
kommt "WriteEndElement" ganz ohne Parameter aus.
Das ist leicht nachzuvollziehen, denn
"WriteEndElement" schließt immer den zuletzt
erzeugten Knoten. Wäre dies anderes, könnte man
überlappende Verschachtelungen konstruieren. Das
ist in XML aber nicht erlaubt!
Nachdem wir das XML-Dokument nach unseren Wünschen gestaltet haben, fehlen noch wenige Schritte um daraus eine Datei zu erzeugen. Das Dokument muß geschrieben werden und der XmlTextWriter, der ja wie erwähnt mit einem Stream arbeitet, muß geschlossen werden. Im Programm sieht das dann so aus:
Nachdem wir das XML-Dokument nach unseren Wünschen gestaltet haben, fehlen noch wenige Schritte um daraus eine Datei zu erzeugen. Das Dokument muß geschrieben werden und der XmlTextWriter, der ja wie erwähnt mit einem Stream arbeitet, muß geschlossen werden. Im Programm sieht das dann so aus:
myXMLWriter.WriteEndDocument();
myXMLWriter.Close();
myXMLWriter.Close();
Jetzt noch einmal den
kompletten Programmcode im Zusammenhang:
XmlTextWriter
myXMLWriter = new XmlTextWriter("test.xml",null);
myXMLWriter.WriteStartDocument(true);
myXMLWriter.WriteStartElement("Person");
myXMLWriter.WriteElementString("Name", "Muster");
myXMLWriter.WriteElementString("Vorname", "Max");
myXMLWriter.WriteElementString("Ort", "Dortmund");
myXMLWriter.WriteEndElement();
myXMLWriter.WriteEndDocument();
myXMLWriter.Close();
myXMLWriter.WriteStartDocument(true);
myXMLWriter.WriteStartElement("Person");
myXMLWriter.WriteElementString("Name", "Muster");
myXMLWriter.WriteElementString("Vorname", "Max");
myXMLWriter.WriteElementString("Ort", "Dortmund");
myXMLWriter.WriteEndElement();
myXMLWriter.WriteEndDocument();
myXMLWriter.Close();
Die daraus resultierende XML-Datei sieht dann so
aus:
<?xml version="1.0" standalone="yes">
<Person>
<Name>Muster</Name>
<Vorname>Max<Vorname>
<Ort>Dortmund</Ort>
</Person>
Im nächsten Teil beschäftigen wir und mit komplexeren XML-Struktuten und Knotenattributen.
<?xml version="1.0" standalone="yes">
<Person>
<Name>Muster</Name>
<Vorname>Max<Vorname>
<Ort>Dortmund</Ort>
</Person>
Im nächsten Teil beschäftigen wir und mit komplexeren XML-Struktuten und Knotenattributen.