Der XmlTextWriter (Teil 2) XML-Attribute
Wie wir in Teil 1 gelernt haben, werden in XML sogenannte Knoten benutzt, um Informationen zu verwalten.
myXMLWriter.WriteElementString("Vorname",
"Max");
Dieser Befehl erzeugt
einen "Vorname"-Knoten, der den Wert "Max" enthält.
Im XML-Dokument sieht das Ergebnis so aus:
<Vorname>Max</Vorname>
Allerdings ist es nicht nur möglich in dem Knoten Informationen zu speichern, auch die Knoten selbst können Daten enthalten. Dies nennt man dann Attribute. Sogar im vorherigen Abschnitt haben wir schon mit Attributen gearbeitet. Erinnern wir uns:
<Vorname>Max</Vorname>
Allerdings ist es nicht nur möglich in dem Knoten Informationen zu speichern, auch die Knoten selbst können Daten enthalten. Dies nennt man dann Attribute. Sogar im vorherigen Abschnitt haben wir schon mit Attributen gearbeitet. Erinnern wir uns:
myXMLWriter.WriteStartDocument(true);
Diese Programmzeile
fügt unserem Dokument zwei wichtige Informationen
hinzu. Das ist einmal die Versionsnummer, die
automatisch eingefügt wird und die Angabe
"standalone=yes" wenn der Parameter true ist.
Natürlich wäre es wünschenswert, wenn wir auch für
unsere eigenen Knoten Attribute vergeben könnten.
Erzeugen wir aber zuerst ein XML-Dokument mit
Befehlen, die wir schon kennen.
XmlTextWriter
myXMLWriter = new
XmlTextWriter("mitarbeiter.xml",null);
myXMLWriter.WriteStartDocument(true);
myXMLWriter.WriteStartElement("Mitarbeiter");
myXMLWriter.WriteStartDocument(true);
myXMLWriter.WriteStartElement("Mitarbeiter");
Eine Datei für
Mitarbeiter, wie sie hier erzeugt wird, ist keine
ungewöhnliche Aufgabenstellung. Allerdings ist es
auch nicht ungewöhnlich, dass sich Mitarbeiter in
einem Unternehmen oder in einem Team ändern. Ebenso
können sich durchaus die Daten ändern, die für
jeden Mitarbeiter benötigt werden. Elemente die
beim ersten Entwurf nicht enthalten waren, können
in späteren Versionen des Dokumentes nötig sein.
Ebenso können Elemente wegfallen oder weitere
Unterknoten hinzugefügt werden. Daraus ergibt sich
die Notwendigkeit, die Aktualität des Dokumentes
ermitteln zu können. Zusätzlich benötigen wir
eventuell eine Versionsnummer, mit der wir
unterschiedliche Versionen der Dokumentenstruktur
erkennen können. Für diese beiden Aufgaben fügen
wir unserem Mitarbeiter-Knoten Attributwerte
hinzu.
myXMLWriter.WriteAttributeString("Version",
"1.0");
myXMLWriter.WriteAttributeString("Erstellt", DateTime.Now.ToString());
myXMLWriter.WriteAttributeString("Erstellt", DateTime.Now.ToString());
Ähnlich wie
"WriteEndElement" immer den zuletzt geöffneten
Knoten schließt, fügt "WriteAttributeString" immer
dem zuletzt geöffneten Knoten Attribute hinzu. Mit
diesen beiden Attributen im Mitarbeiter-Knoten ist
es jetzt ein Leichtes, zu prüfen um welche
Versionen des Dokumentes es sich handelt und wann
diese erstellt wurde. Nicht verwechseln dürfen wir
hier die Versionsnummer der Mitarbeiterliste und
die Versionsnummer des XML-Dokumentes. Die
Versionsnummer des Dokumentes bezieht sich auf die
XML-Spezifikationen, worauf wir als Programmierer
keinen Einfluß haben. Die Versionsnummer im
Mitarbeiter-Knoten gibt tatsächlich Auskunft über
die von uns erstellten Daten.
Nachdem das Dokument alle wichtigen Attribute enthält, können auch die Daten geschrieben werden. Anders als in den bisherigen Beispielen sind Daten in der Regel keine festen Texte, sondern kommen aus einer Datenbank oder anderen Datenquellen.
Will man eine Liste von Daten in eine Datei schreiben, kann man sich verschiedenen Schleifenfunktionen bedienen. Wichtig ist, dass die Unterknoten auch innerhalb der Schleifen geöffnet und geschlossen werden. Der nachfolgende Codeausschnitt schreibt alle Personen einer Mitarbeiterliste in ein XML-Dokument.
Nachdem das Dokument alle wichtigen Attribute enthält, können auch die Daten geschrieben werden. Anders als in den bisherigen Beispielen sind Daten in der Regel keine festen Texte, sondern kommen aus einer Datenbank oder anderen Datenquellen.
Will man eine Liste von Daten in eine Datei schreiben, kann man sich verschiedenen Schleifenfunktionen bedienen. Wichtig ist, dass die Unterknoten auch innerhalb der Schleifen geöffnet und geschlossen werden. Der nachfolgende Codeausschnitt schreibt alle Personen einer Mitarbeiterliste in ein XML-Dokument.
foreach(Person
pers in mitarbeiterListe)
{
myXMLWriter.WriteStartElement("Person");
myXMLWriter.WriteElementString("Name", pers.name);
myXMLWriter.WriteElementString("Vorname", pers.vorname);
myXMLWriter.WriteElementString("Ort", pers.ort);
myXMLWriter.WriteEndElement();
}
{
myXMLWriter.WriteStartElement("Person");
myXMLWriter.WriteElementString("Name", pers.name);
myXMLWriter.WriteElementString("Vorname", pers.vorname);
myXMLWriter.WriteElementString("Ort", pers.ort);
myXMLWriter.WriteEndElement();
}