Site logo
Site logo
Programmieren aus Leidenschaft
Programmieren aus Leidenschaft

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:
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");
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());
Ä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.
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();
}