Alles über Dateien Alles über Dateien .NET XML. Schweiger Simon. Version Seite 1

Ähnliche Dokumente
Einführung in das Microsoft.NET-Framework. Programmiersprache C# 02: Visual Studio / Hello World. Boris Hülsmann

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Delegatesund Ereignisse

Seite Seite 2

Klausur Grundlagen der Programmierung

4 Schleifen und Dateien

Dokumentenstrukturen

GI Vektoren

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

5 Beispielprogramme CISVB64.EXE CISVC64.EXE CISLZ64.EXE CISVBA Declares... 34

Das erste Programm. 3.1 Hello World

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

8a. Exkurs.NET. 8a.1.NET Architektur

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

PIWIN 1 Übung Blatt 5

Access [basics] Programmieren mit Arrays. Beispieldatenbank. Arrays. Eindimensionale Arrays. VBA-Grundlagen Programmieren mit Arrays

2.4 Das erste C++-Programm *

6 Ein- und Ausgabe. Bisher war unsere (Bildschirm-) Ausgabe leichtflüchtig (

Einführung in die Programmierung 1

... MathML XHTML RDF

jetzt lerne ich ASP.NET Dynamische Webseiten mit ASP.NET 1.1 mit Ausblick auf ASP 2.0 WENZ KORDWIG TRENNHAUS

Zugriff auf Daten der Wago über eine Webseite

Innovator 11 excellence. Anbindung an Visual Studio. Einführung, Installation und Konfiguration. Connect. Roland Patka.

Übersicht Shell-Scripten

Aktivitäten in C# /.NET umsetzen

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Informatik B von Adrian Neumann

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 23

Distributed Computing Group

C# - Einführung in die Programmiersprache. Leibniz Universität IT Services Anja Aue

Ihr erstes C#- Programm

TimePunch. TimePunch Command. Benutzerhandbuch TimePunch KG, Wormser Str. 37, Bürstadt

Java: Kapitel 9. Java und XML. Programmentwicklung WS 2008/2009. Holger Röder

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Webseite in XML Kurzeinführung

Eine Kommando-Oberfläche für.net

Erstellen von speziellen Ereignissen in C#

Erzeugen benutzerdefinierter Buchstabenlisten in EXCEL

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Grundlagen von C# - 1

Hilfe zur Bedienung finden Sie stets beim Buchsymbol Info.

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 4: Kombination OOP/.NET

Soli Manager 2011 Installation und Problemanalyse

Einstieg in die Informatik mit Java

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

C programmieren. Jürgen Wolf

Studentische Lösung zum Übungsblatt Nr. 7

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

Programmieren in Java

System.out.println("TEXT");

AuD-Tafelübung T-B5b

Eine kleine Befehlssammlung für Java Teil1

Programmieren I + II Regeln der Code-Formatierung

Weiterverarbeitung Leseranfragen

mgssepa.dll SEPA LIBRARY MICHAEL GRUBE MG SOFTWARE ENTWICKLUNG

Dokumentation: Erstellung einer Content App für Windows 8

5.1 Bestehende Projekte bearbeiten Neue Projekte erstellen 85

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Praktikum 1: Einführung, BMI Rechner

Direkte Datenbankverbindungen über das Z39.50-Protokoll

Der Windows Explorer INITE 7e 2003 Joël François

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

DAS EINSTEIGERSEMINAR

Projekt Xaml Konverter

1 Software Engineering 1

OWA Benutzerhandbuch. Benutzerhandbuch Outlook Web App 2010

Rekonstruktion der SolarLog minxxxxxx.js-dateien aus Daten, die mit dem ELV-EM1010PC-System und meinen Makros erfasst wurden

Eine Schnelleinführung in CSS

1 Was ist XML? Hallo XML! Kommentare in XML 52

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

Whitepaper. Produkt: combit address manager. Faxen mit dem address manager. combit GmbH Untere Laube Konstanz

Changelog objectif 7.0 Service Pack 3

Grundlagen der Objektorientierten Programmierung - Statische Arrays

Die ersten C#- Programme erstellen

Initiative Tierwohl. Einrichtung des FTP-Zugangs zur Clearingstelle. In 5 Schritten zum sicheren FTP-Zugang. Version

Projektdokumentation

Info Betrifft: VBA, XML, MSXML-DOM Systemanforderungen: VBA-Host- Anwendung + Internet Explorer 5 oder höher Seitenzahl: 5

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

3 Klassen, Attribute, Methoden

Brainfuck Interpreter für ZX81

Dr. Thomas Meinike Hochschule Merseburg

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Arbeiten im Team. Präsentationen per verschicken. Übung 1: Präsentation an eine anhängen

PHP objektorientiert

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Kapitel 1: Die ersten Schritte Thema: Programmieren Seite: 1

Das Handbuch zu Filelight. Max Howell Martin Sandsmark Übersetzung: Felix Schweighofer

Java: Eine kurze Einführung an Beispielen

Installationsanleitung

Adressetiketten mit Hilfe der freien Namenslisten in BS und der Seriendruckfunktion von Microsoft Word erstellen

Einführung in die C-Programmierung

Dialogfeld «Speichern unter» öffnen und unter Dateityp «Word Dokument mit Makros» wählen. Das Dokument wird mit der Endung.dotm abgespeichert.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Arbeiten mit Dokumenten-Mustern

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Hilfe Bearbeitung von Rahmenleistungsverzeichnissen

Objektorientierte Programmierung mit C++ Vector und List

Ogre Einführung Teil 1

Transkript:

Alles über Dateien.NET XML C# Schweiger Simon Version 2.0.2 Seite 1

Inhaltsverzeichnis Vorwort... 3 Vorwort zur Version 2.0... 3 Veränderungen seit der letzen Version (Changelog):... 4 Dateien lesen und schreiben... 5 Allgemeines... 5 Zeichensätze... 5 Dateien schreiben... 5 Die neuen Möglichkeiten des.net Frameworks 2.0... 6 Dateien lesen... 7 Die neuen Möglichkeiten des.net Frameworks 2.0... 8 XML Dateien... 9 Was ist XML? Einführung... 9 Der Aufbau einer XML Datei... 9 Verschachtelung... 10 Attribute... 11 Elemente ohne echtes End-Tag... 11 Sonstiges... 12 Erzeugen und Einlesen von XML Dateien... 13 Erzeugen von XML Dateien... 13 Lesen von XML-Dateien... 15 Anhänge... 17 Nachwort... 17 Seite 2

Vorwort Alles über Dateien 2.0 2006 In diesem Artikel werde ich versuchen die wichtigsten Möglichkeiten aufzuzeigen, die das.net Framework zur Dateimanipulation bietet. Dabei werde ich nicht nur bei einfachen Textdateien bleiben, sondern auch XML Dateien behandeln. Ich verwende die Programmiersprache C# für die Codebeispiele in diesem Artikel. Allerdings sollten sie sich ohne Probleme auch mit anderen.net Programmiersprachen wie z.b. VB.net umsetzen lassen. Ich werde sowohl auf die klassische Art der Dateimanipulation als auch auf die neuen Möglichkeiten des.net Frameworks 2.0 eingehen. Um diesen Artikel zu verstehen und ihn nachvollziehen zu können, sollte das Microsoft.NET Framework 1.x oder 2.0 und eine Entwicklungsumgebung installiert sein. Im empfehle Ihnen entweder die kostenlose Entwicklungsumgebung SharpDevelop einzusetzen, oder die Visual Studio Express Editionen von Microsoft. Außerdem sollten Sie bereits ein wenig Erfahrung mit der Entwicklungsumgebung und der.net Programmiersprache Ihrer Wahl haben. Den Erklärungen folgt immer ein Codebeispiel, dass das beschriebene Thema an Hand eines Praxisbeispiels vertieft. Die Codebeispiele sind mit vielen Kommentaren ausgestattet. Ich wünsche Ihnen viel Spaß beim Lesen dieses Artikels. Falls Sie Fragen, Wünsche oder Anregungen haben können Sie mir gerne eine E-Mail senden. Auch wenn Sie eine der Erklärungen nicht verstehen, bin ich für eine E-Mail sehr dankbar, da dies mir ermöglicht den Artikel noch einsteigerfreundlicher zu gestalten. Meine Adresse ist simon.schweiger@tnr.at. Schweiger Simon, 06. Juli 2006 Vorwort zur Version 2.0 Seit der Veröffentlichung der ersten Version auf mycsharp.de ist fast ein Jahr vergangen. In dieser Zeit habe ich selbst viel dazugelernt. Obwohl es inzwischen genügend Alternativen zu diesem Artikel gibt (z.b. das hervorragende C# 2005 OpenBook von Galileo Computing), habe ich mich entschlossen den Artikel neu zu schreiben und ihn um einen XML Teil zu erweitern, da das Tutorial sehr stark Seite 3

mit der Community verdrahtet ist und ich daher sehr leicht an Feedback gelange, dass es mir ermöglicht den Artikel noch weiter zu verbessern. Veränderungen seit der letzen Version (Changelog): 2.0.2 2.0.1 2.0.0 Alle Codebeispiele sind jetzt in Courier New, Schriftgröße 10 formatiert Nachwort überarbeitet Einige Rechtschreibfehler behoben Beta-Notiz auf der Titelseite entfernt Der Artikel wurde komplett neu geschrieben und enthält nun auch einen eigenen XML Abschnitt Seite 4

Dateien lesen und schreiben Alles über Dateien 2.0 2006 In diesem Kapitel zeige ich Ihnen die Möglichkeiten, Dateien einzulesen und Dinge in Dateien zu schreiben, die das.net Framework bietet. Die Codebeispiele sind absichtlich einfach gehalten und verzichten auf eine Fehlerbehandlung, welche im Normalfall unbedingt angewendet werden sollte. Allgemeines Die Ein und Ausgabeoperation basieren auf Datenströmen(engl. Streams). Um Daten z.b. von Dateien einzulesen oder Daten in eine Datei zu schreiben, wird zuerst ein Datenstrom erzeugt und dann die Daten geschrieben. Hat man die gewünschten Operationen beendet, sollte man den Dateistrom unbedingt schließen, damit die verwendeten Resourcen freigeben werden. Das Lesen und Schreiben von Daten in Dateien geschieht, wie sie anhand der Erklärungen und der Codebeispiele sehr schnell merken werden, sehr ähnlich. Zeichensätze Zum Lesen und Schreiben von Dateien ist es wichtig, welchen Zeichensatz die Datei verwendet. Zeichensätze geben an, welches Zeichen zu welchem Binärcode gehört. Besonders wichtig sind Zeichensätze, wenn man Umlaute oder andere sprachspezifische Zeichen wie z.b. chinesische Zeichen in ein Dokument schreiben will. Verwendet man einen falschen Zeichensatz, erhält man beim Auslesen und Anzeigen einen kryptischen Zeichensalat. Dateien schreiben Daten in Dateien zu schreiben ist mit Hilfe der StreamWriter Klasse keine schwere Aufgabe. Das folgende Beispiel schreibt eine einfache Telefonnummern-Liste in eine Dateim it dem N am en telefonnum m ern.txt,die im Verzeichnis der Anwendung erstellt wird. In einem späteren Codebeispiel werden wir die von diesem Codebeispiel erstellte Datei wieder einlesen und verarbeiten. Das Schreiben von Dateien geschieht zeilenweise. Zuerst erzeugen wir eine Instanz der Klasse StreamWriter und dann rufen wir für jede Zeile dir wir schreiben möchten die WriteLine() Methode auf und übergibt ihr den Text, den Seite 5

wir in die Zeile schreiben möchten. In unserem Beispiel ist das der Name und die Telefonummer des Kontakts, getrennt mit einem Strichpunkt. using System; using System.IO; using System.Windows.Forms; namespace SimonKnight6600.Tutorials public class Program static void Main() // Datei erzeugen und öffnen StreamWriter writer = File.CreateText(Application.StartupPath + "\\telefonnummern.txt"); // Ein paar Einträge hineinschreiben writer.writeline("thomas;223245"); writer.writeline("matze;22741"); writer.writeline("michael;357228"); writer.writeline("richard;242531"); writer.writeline("dominik;242352"); writer.close(); // Den Dateizugriff beenden Die neuen Möglichkeiten des.net Frameworks 2.0 Das.NET Framework bietet in der Version 2.0 eine neue nützliche Funktionen, die zwar nicht notwendig sind, aber die Arbeit mit Dateien wesentlich komfortabler gestalten. Im wesentlich beziehe ich mich dabei auf die Klasse File, die neue statische Methoden enthält die uns das Schreiben von Dateien erleichtern. Die Methode WriteAllText() schreibt den ihr übergebenen Text in eine Datei. Der Methode WriteAllLines() können Sie ein string Array übergeben, in dem sich die einzelnen Zeilen der Datei befinden. Das oben gezeige Codebeispiel könnte, mit Hilfe der File Klasse realisiert, auch so aussehen: using System; using System.IO; using System.Windows.Forms; namespace SimonKnight6600.Tutorials Seite 6

public class Program static void Main() // Die Telefonnummmern-Liste als string[] Array string[] zeilen = new string[] "Thomas;223245", "Matze;22741", "Michael;357228", "Richard;242531", "Dominik;242352" ; // Datei schreiben File.WriteAllLines(Application.StartupPath + "\\telefonnummern.txt", zeilen); Dateien lesen Dateien einzulesen funktioniert fast auf die selbe Weise wie das Schreiben von Dateien. Dazu benutzen wir das Gegenstück der Klasse StreamWriter: Die Klasse StreamReader. Das folgende Beispiel liest die von den obigen Beispielen erzeuge Datei telefonnum m ern.txt w ieder ein und gibt das Ergebnis form atiert über die Konsole aus. Das Einlesen funktioniert, wie beim Schreiben, zeilenweise. Statt der Methode WriteLine() rufen wir zum Einlesen die Methode ReadLine() von StreamReader auf. using System; using System.IO; using System.Windows.Forms; namespace SimonKnight6600.Tutorials public class Program static void Main() // StreamReader Instanz erzeugen und Datei öffnen StreamReader reader = new StreamReader(Application.StartupPath + "\\telefonnummern.txt"); do // Aktuelle Zeile einlesen und aufteilen string[] zeile = reader.readline().split(';'); string name = zeile[0]; string telefonnummer = zeile[1]; Seite 7

telefonnummer); // Name und Telefonnummer ausgeben Console.WriteLine("Name: " + name + " Telefonummer: " + // Falls Peek -1 zurückgibt, sind wir am Ende der Datei while (reader.peek()!= -1); // Dateizugriff beenden reader.close(); Console.ReadLine(); Die neuen Möglichkeiten des.net Frameworks 2.0 Auch für das Lesen von Dateien hält die Klasse File komfortable Möglichkeiten bereit. Die Gegenstücke zu den oben genannten Schreibmethoden sind ReadAllText() und ReadAllLines(). ReadAllText() liest die Datei ein und gibt den Inhalt als string zurück. ReadAllLines() gibt den Inhalt als String Array zurück. Die von den Schreibbeispielen erstellte Telefonnummen-Liste könnte auch so eingelesen und ausgegeben werden: using System; using System.IO; using System.Windows.Forms; namespace SimonKnight6600.Tutorials public class Program static void Main() // Alle Zeilen in einem Rutsch einlesen string[] zeilen = File.ReadAllLines(Application.StartupPath + "\\telefonnummern.txt"); // Alle Zeilen in einer Schleife durchlaufen foreach (string zeile in zeilen) // Zeile aufteilen string[] aufgeteilt = zeile.split(';'); // Ausgeben Console.WriteLine("Name: " + aufgeteilt[0] + "Telefonnummer: " + aufgeteilt[1]); Console.ReadLine(); Seite 8

XML Dateien Was ist XML? Einführung XM L ( Extensible Markup Language ) ist ein Standard zur Erstellung von Maschinen- und menschenlesbaren Dokumente in Form einer Baumstruktur(Quelle: Wikipedia). Das bedeutet, dass XML Dateien sehr gut strukturierte Dateien sind, die leicht von Programmen eingelesen werden können. XML ist sehr weit verbreitet. XHTML, RSS und das Dateiformat des kommenden Microsoft Office 2007 sind nur einige populäre und auf XML basierende Dateiformate. Ein weiterer Vorteil von XML ist seine Platformunabhänigkeit. XML kann von von Programmen jedes Betriebssystems eingelesen werden. Falls Sie weitergehende Informationen über XML möchten, können Sie den ausgezeichneten Wikipedia-Artikel lesen. Im Folgenden werde ich nur einen groben Überblick über den Aufbau von XML Dateien bieten. In XML Dateien können Sie z.b. Programmeinstellungen abspeichern. Dies werden wir in einem späteren Beispiel auch machen. Der Aufbau einer XML Datei Wie bereits erwähnt, sind XML Dateien sehr gut strukturiert. XML Dateien bestehen aus einzelnen Elementen. Diese Elemente jeweils aus dem Start-Tag, dem Inhalt und dem End-Tag. Damit Sie sich das besser vorstellen können, hier ein Auszug aus einer XML Datei: <Benutzername>Robert</Benutzername> Seite 9

Der rote Text ist das Start-Tag. Der Text zwischen spitzen Klammern ist der Name des Tags. Der grüne Text ist das End-Tag. Es ist gleich aufgebaut wie das Start-Tag, der einzige U nterschied ist das / -Zeichen nach der spitzen Klammer. Wichtig ist, dass der Text zwischen den Spitzen Klammern gleich wie der Name des Tags ist. Zwischen diesen beiden Teilen ist der Inhalt des Elements, in diesem Fall Robert. Beispiel für ein falsches Element: <Benutzer>Simon</Benutzerrrrr> Das ist falsch, da im End-Tag der Text (grün markiert) anders als der Text im Start-Tag (rot markiert) ist. Richtig wäre zum Beispiel dieses Element, da der Text im Start- und End-Tag gleich ist: <Benutzer>Simon</Benutzer> Oder auch dieses: <Obst>Apfel</Obst> Verschachtelung XML Elemente können ineinander verschachtelt werden. Zum Beispiel kann eine Liste mit Benutzernamen so aussehen: <Benutzerliste> <Benutzer>Robert</Benutzer> <Benutzer>Simon</Benutzer> </Benutzerliste> Wichtig ist, dass jedes Element einen Anfang und ein Ende hat. Zur besseren übersicht habe ich nochmals die Start-Tags rot und die End-Tags grün eingefärbt. Seite 10

Attribute Attribute gehören ebenfalls noch zum Aufbau eines Elemente, genauer gesagt gehören Sie zum Start-Tag. Mit Attributen können Sie zusätzliche Informationen in einem Element unterbringen. So könnte es in dem Beispiel der Benutzerliste unterschiedliche Benutzer geben: Standard-Benutzer und Premium-Benutzer. Diese Information könnten w ir in einem Attribut m it dem N am en typ unterbringen. Attribute werden nach dem Namen des Start-Tags untergebracht. Beispiel: <Benutzer typ= standard >Robert</Benutzer> Beispiel für einen Premium-Benutzer: <Benutzer typ= premium >Sim on</benutzer> Der in den Beispielen rot gefärbte Text ist der Name des Attributs, in unserem Fall typ. Der violett gefärbte Text ist der Inhalt des Attributs. In unserer Benutzerliste schreiben w ir hier entw eder prem ium oder standard. Elemente ohne echtes End-Tag Im Zusammenhang mit Attributen gibt es noch eine Besonderheit am Aufbau von Elementen. In dem vorherigen Beispiel haben wir den Benutzernamen in den Inhalt des Tags geschrieben und den Typ des Benutzers in ein entsprechendes Attribut. Wir könnten aber auch für beide Informationen Attribute verwenden. Dies würde dann so ausschauen: <Benutzer name= Robert typ= standard ></Benutzer> Da in diesem Fall der Inhalt des Tags leer ist, können wir das End-Tag weglassen, müssen aber vor der schließenden spitzen Klammer des Start-Tags ein / -Zeichen setzen. Beispiel: <Benutzer name= Robert typ= standard /> Das Start-Tag w ird in diesem Fall Em pty-element-tag genannt. In den folgenden Erklärungsbeispielen schreibe ich aber, wie vorher, den Benutzernamen in den Inhalt des Tags. Seite 11

Sonstiges Hier gebe ich Ihnen noch einige wichtige Informationen, die den Aufbau von ganzen XML Dateien betreffen. Nur ein Wurzel/Stamm Element ist erlaubt XML Dokumente brauchen immer genau ein Wurzel/Stamm Element. Das heißt, dass alle anderen Elemente in diesem Element verschachtelt sein müssen. Um Ihnen das anschaulich zu machen, sehen Sie nun zwei Beispiele für XML Dateien. Das erste Beispiel ist falsch, da es mehrere Wurzelelemente gibt. Im zweiten Beispiele sind aller anderen Elemente in dem Element Benutzerliste verschachtelt,w elches das einzige W urzelelem ent ist. FALSCH: (Kompletter Dateiinhalt) <Benutzer>Simon</Benutzer> <Benutzer>Thomas</Benutzer> RICHTIG: (Kompletter Dateiinhalt) <Programmbenutzer> <Benutzer>Simon</Benutzer> <Benutzer>Thomas</Benutzer> </Programmbenutzer> XML Deklaration Am Anfang einer jeden XML Datei, sollte man eine XML Deklaration setzen. Diese enthält Informationen zur XML Version (wobei momentan die Version 1.0 aktuell ist) und zum Zeichensatz der Datei. Diese XML Deklaration sieht z.b. so aus: <?xml version="1.0" encoding="utf-8"?> Wie Sie sicher erkennen, hat diese vom Aufbau her eine große Ähnlichkeit zu XM L Elem enten. So erkennt m an die Attribute version und encoding. Mithilfe des Attributs version gibt m an die XM L-Version an und im Attribut encoding den Zeichensatz. Wenn Sie XML-Dateien mithilfe des.net Frameworks erzeugen, wird diese XML Deklaration automatisch erzeugt. Seite 12

Erzeugen und Einlesen von XML Dateien Da Sie sich nun einen groben Überblick über XML verschafft haben sollten, widmen wir uns jetzt dem Erzeugen und Einlesen von XML Dateien mithilfe des.net Frameworks. Ich werde dabei keine Unterscheidung zwischen den.net Framework Versionen 1.x und 2.0 machen, da sowohl die aktuellste Version von SharpDevelop und auch die Visual Studio Express Editionen auf.net 2.0 basieren. Falls Sie sich einen zusätzlichen Abschnitt zu den Unterschieden der beiden Versionen im Bezug auf die XML Verarbeitung wünschen, schicken Sie mir eine E-Mail. Meine E-Mail Adresse finden im Vorwort am Anfang des Artikels. Die folgenden Codebeispiele werden eine einfache Konfigurationsdatei erzeugen und einlesen. Für das Beispiel habe ich folgenden Aufbau gewählt. (Diesen können Sie natürlich an ihre Bedürfnisse anpassen) <?xml version="1.0" encoding="utf-8"?> <Einstellungen> <SplashAnzeigen>Ja</SplashAnzeigen> <Autoupdate>Nein</Autoupdate> <Programmversion>1.0.2</Programmversion> </Einstellungen> Was in den Tags gespeichert werden soll, sollte selbsterklärend sein. Erzeugen von XML Dateien Zuerst einmal werden wir ein Programm schreiben, dass so eine Konfigurationsdatei erzeugen kann. Die dafür notewendigen Klassen finden sich im Namensraum System.Xml. Zum Schreiben von XML Dateien verwenden wir die Klasse XmlWriter. Diese verwendet man, indem man die Methode Create() der Klasse aufruft, also: XmlWriter writer = XmlWriter.Create(Application.StartupPath + "\\configuration.xml"); Der XmlWriter funktioniert folgendermaßen: Es wird immer zuerst eine Methode WriteStart... aufgerufen, dann damit gearbeitet und dann die Methode WriteEnd... aufgerufen. Seite 13

Konkret heißt das, dass wir zum Beispiel WriteStartElement() aufrufen, um ein Element zu erzeugen, dann den Inhalt des Elements mit WriteString() hineinschreiben oder Attribute mit WriteAttributeString() erzeugen und danach die Methode WriteEndElement() aufrufen. Bevor wir Elemente in die Xml-Datei schreiben können, müssen wir die Methode WriteStartDocument() aufrufen. Die schreibt die im vorherigen Abschnitt XmlDeklaration beschriebenen Informationen in das Dokument. Nach der Arbeit müssen wir natürlich wieder WriteEndDocument() aufrufen. Sie sehen, die Arbeit verläuft immer nach dem gleichen Schema. Das Ganze klingt jetzt vieleicht etwas kompliziert, aber das folgende Codebeispiel sollte für etwas mehr Klarheit sorgen. Es erzeugt die beschriebene XML-Dateim it dem N am en configuration.xm l im Verzeichnis der Anw endung. using System; using System.IO; using System.Windows.Forms; using System.Xml; namespace SimonKnight6600.Tutorials public class Program static void Main() // XmlWriter-Instanz erzeugen XmlWriter writer = XmlWriter.Create(Application.StartupPath + "\\configuration.xml"); // Mit dem Schreiben des Dokuments beginnen writer.writestartdocument(); // Wurzelelement 'Einstellungen' erzeugen und in // diesem weiterarbeiten writer.writestartelement("einstellungen"); // Element 'SplashAnzeigen' erzeugen und in diesem // weiterarbeiten writer.writestartelement("splashanzeigen"); // Inhalt in das Element schreiben writer.writestring("ja"); // Die Arbeit mit dem Elemenet beenden (Ende-Tag // wird erzeugt) writer.writeendelement(); // Nun machen wir das Gleiche wie in dem vorherigen // Code, nur mit dem Element 'Autoupdate' writer.writestartelement("autoupdate"); writer.writestring("nein"); Seite 14

writer.writeendelement(); // Und nocheinmal. Diesmal mit dem Element // 'Programmversion' writer.writestartelement("programmversion"); writer.writestring("1.0.2"); writer.writeendelement(); // Nun müssen wir das das am Anfang erzeuge // Element 'Einstellungen' schließen... writer.writeendelement(); //... und die Arbeit mit dem Dokument beenden writer.writeenddocument(); // Den XmlWriter schließen writer.close(); Wie Sie sehen, wird zuerst eine Instanz von XmlWriter erzeugt. Nach wird die Methode WriteStartDocument() aufgerufen, um mit der Arbeit zu beginnen. N un w ird das W urzelelem ent erzeugt, dass in unserem Fall Einstellungen heißt. Jetzt durchlaufen wir für jedes Element die Prozedur von WriteStartElement(), WriteString() und WriteEndElement(). Schließlich wird das am Anfang erzeugte Wurzelelement genauso wie andere Elemente geschlossen und die Arbeit mithilfe von WriteEndDocument() abgeschlossen. Abschließend wird der Zugriff auf die Datei mittels Aufruf der Close() Methode geschlossen. Lesen von XML-Dateien Das Lesen von XML-Dateien geschieht fast genau gleich wie das Schreiben. Die Instanz der Klasse XmlReader erzeugen wir wieder mit der Methode Create(). Wir können sofort loslegen ohne vorher eine Methode aufzurufen, um die Arbeit zu beginnen. Zuerst öffnen wir das Wurzel-Element. Nun durchlaufen wir für jeden Element die Prozedur von ReadStartElement(), ReadString() und ReadEndElement(). Das Seite 15

Ergebnis von ReadString() geben wir gleich über Console.WriteLine() aus, damit wir auch sehen, dass es funktioniert. Abschließend wird das Wurzel-Element geschlossen und der Dateizugriff beendet. Damit wir die Ausgaben auf der Konsole auch sehen können, rufen wir die Methode Console.ReadLine() auf. Dam it das Beispielfunktioniert,m uss natürlich die Datei configuration.xm l vorhanden sein. using System; using System.IO; using System.Windows.Forms; using System.Xml; namespace SimonKnight6600.Tutorials public class Program static void Main() // Instanz von XmlReader erzeugen XmlReader reader = XmlReader.Create(Application.StartupPath + "\\configuration.xml"); // Das Wurzelelement 'Einstellungen' öffnen reader.readstartelement("einstellungen"); // Element 'SplashAnzeigen' öffnen reader.readstartelement("splashanzeigen"); // Inhalt per reader.readstring() auslesen und per // Console.WriteLine() gleich ausgeben Console.WriteLine("SplashAnzeigen: "+reader.readstring()); // Element 'SplashAnzeigen' schließen reader.readendelement(); // Die gleiche Prozedur wie vorher, diesmal // mit dem Element 'Autoupdate' reader.readstartelement("autoupdate"); Console.WriteLine("Autoupdate: " + reader.readstring()); reader.readendelement(); // Und nocheinmal. Nun mit dem Element // 'Programmversion' reader.readstartelement("programmversion"); Console.WriteLine("Programmversion: " + reader.readstring()); reader.readendelement(); // Das am Anfang geöffnete Wurzelelement schließen // und den Dateizugriff beenden reader.readendelement(); Seite 16

reader.close(); // Die Konsole so lange offen halten, bis man die // ENTER Taste drückt, sonst würde man die // Ausgaben nicht sehen Console.ReadLine(); Anhänge Nachwort Ich hoffe, dass Ihnen dieser Artikel gefallen hat und Sie nun wissen, wie man mit Dateien umgeht. Meine größte Sorge beim Schreiben dieses Artikels war, dass er für die Zielgruppe zu kompliziert geschrieben ist. Falls Sie also eine Stelle entdecken, die Sie nicht verstehen, oder sich Fehler eingeschlichen haben, schicken Sie mir eine E-Mail. (simon.schweiger@tnr.at) Dieser Artikel ist noch in vielen Bereichen erweiterbar. In einer späteren Version werde ich genauer auf Zeichensätze und die Handhabung von XML- Dateien eingehen. Die aktuellste Version erhalten Sie hier: http://www.mycsharp.de/wbb2/thread.php?threadid=21886 Seite 17