Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 14 XML
Pfeil 14.1 Grundlagen
Pfeil 14.2 XML-Dokumente
Pfeil 14.2.1 Wohlgeformte und gültige XML-Dokumente
Pfeil 14.2.2 Die Regeln eines wohlgeformten XML-Codes
Pfeil 14.2.3 Kommentare
Pfeil 14.2.4 Verarbeitungsanweisungen
Pfeil 14.2.5 Reservierte Zeichen in XML
Pfeil 14.2.6 CDATA-Abschnitte
Pfeil 14.2.7 Namensräume (Namespaces)
Pfeil 14.3 Die Gültigkeit eines XML-Dokuments
Pfeil 14.3.1 XML Schema Definition (XSD)
Pfeil 14.3.2 Ein XML-Dokument mit einem XML-Schema verknüpfen
Pfeil 14.3.3 Die Struktur eines XML-Schemas
Pfeil 14.4 Die Klasse »XmlReader«
Pfeil 14.4.1 XML-Dokumente mit einem »XmlReader«-Objekt lesen
Pfeil 14.4.2 Validieren eines XML-Dokuments
Pfeil 14.5 Eigenschaften und Methoden der Klasse »XmlReader«
Pfeil 14.6 Die Klasse »XmlWriter«
Pfeil 14.6.1 Die Methoden der Klasse »XmlWriter«
Pfeil 14.7 Navigation durch XML (XPath)
Pfeil 14.7.1 Die Klasse »XPathNavigator«
Pfeil 14.7.2 XPath-Ausdrücke
Pfeil 14.7.3 Der Kontextknoten
Pfeil 14.7.4 Beispiele mit XPath-Ausdrücken
Pfeil 14.7.5 Knotenmengen mit der »Select«-Methode
Pfeil 14.7.6 Auswerten von XPath-Ausdrücken
Pfeil 14.8 Das Document Object Model (DOM)
Pfeil 14.8.1 Allgemeines
Pfeil 14.8.2 Arbeiten mit »XmlDocument«
Pfeil 14.8.3 »XmlDocument« und »XPathNavigator«
Pfeil 14.8.4 Die Klasse »XmlNode« (Operationen mit Knoten)
Pfeil 14.8.5 Manipulieren einer XML-Struktur
Pfeil 14.8.6 Ändern eines Knotens
Pfeil 14.8.7 Löschen in einem XML-Dokument
Pfeil 14.9 Serialisierung mit »XmlSerializer«
Pfeil 14.9.1 XML-Serialisierung mit Attributen steuern
Pfeil 14.10 LINQ to XML
Pfeil 14.10.1 Allgemeines
Pfeil 14.10.2 Die Klassenhierarchie von LINQ to XML
Pfeil 14.10.3 Die Klasse »XElement«
Pfeil 14.10.4 Die Klasse »XDocument«
Pfeil 14.10.5 Navigation im XML-Dokument
Pfeil 14.10.6 Änderungen am XML-Dokument vornehmen

Rheinwerk Computing - Zum Seitenanfang

14.6 Die Klasse »XmlWriter«Zur nächsten Überschrift

Das schreibende Pendant zur Klasse XmlReader ist die Klasse XmlWriter. Erzeugt wird ein XmlWriter-Objekt mit der Methode Create. Sie können das resultierende XML-Dokument in eine Datei schreiben oder einem TextWriter-, StringBuilder- oder Stream-Objekt übergeben.

XmlWriter writer = XmlWriter.Create(@"C:\Personen.xml");

In einer Überladung schreibt die Methode Create in einem zweiten Parameter ein Objekt vom Typ XmlWriterSettings vor. Mit diesem lässt sich die Ausgabe des resultierenden XML-Dokuments steuern. Beispielsweise legen Sie mit der Eigenschaft Indent fest, ob die Zeilen eingerückt werden sollen, und mit IndentChars, mit welchen Zeichen eingerückt werden soll. Die Eigenschaft Encoding legt die Codierung fest, die standardmäßig auf UTF-8 voreingestellt ist.

Ähnlich wie beim XmlReader ist mit der Klasse XmlWriter nur die Vorwärtsbewegung erlaubt. Sehr angenehm dabei ist, dass die spitzen Klammern der Tags nicht berücksichtigt werden müssen. Das eigentliche Schreiben erfolgt durch eine der zahlreichen Write-Methoden.

Ein neues Dokument wird mit WriteStartDocument erzeugt. Am Ende muss noch die Methode WriteEndDocument aufgerufen werden, die das XmlWriter-Objekt wieder in den Ausgangszustand zurückversetzt. Einzelne Elemente ohne Daten werden mit WriteStartElement beschrieben. Diese Elemente werden dann untergeordnete Elemente haben. Als Argument wird dabei der Elementbezeichner übergeben. Das Endtag des Elements wird mit WriteEndElement gesetzt.

writer.WriteStartElement("Person");
[...]
writer.WriteEndElement();

Elemente, die Daten enthalten, erzeugen Sie mit der Methode WriteElementString. Übergeben Sie der Methode zuerst den Elementbezeichner und danach den Wert, z. B.:

writer.WriteElementString("Zuname", "Schmidt");

Das Ergebnis dieser Anweisung wird lauten:

<Zuname>Schmidt</Zuname>

Die Methode erzeugt also das Startelement, den Elementinhalt und das schließende Tag. Alternativ können Sie ein datenführendes Element auch mit WriteStartElement und WriteEndElement beschreiben. Der Inhalt des Elements wird dann mit einer der Methoden WriteString, WriteBase64 oder WriteChars geschrieben.

Soll ein Element ein Attribut haben, rufen Sie die Methode WriteAttributeString auf. Im Minimalfall übergeben Sie zwei Argumente: Das erste gibt den Bezeichner des Attributs an, das zweite den Wert.

Das folgende Beispielprogramm erzeugt eine einfache XML-Datei, in der die zuvor beschriebenen Methoden eingesetzt werden.

// Beispiel: ..\Kapitel 14\XmlWriterSample
static void Main(string[] args) {
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " "; // 2 Leerzeichen
XmlWriter writer = XmlWriter.Create(@"D:\Personen.xml", settings);
writer.WriteStartDocument();
// Starttag des Stammelements
writer.WriteStartElement("Personen");
writer.WriteComment("Die Datei wurde mit XmlWriter erzeugt");
// Starttag von 'Person'
writer.WriteStartElement("Person");
writer.WriteElementString("Zuname", "Kleynen");
writer.WriteElementString("Vorname", "Peter");
// Element mit Attributen
writer.WriteStartElement("Adresse");
writer.WriteAttributeString("Ort", "Eifel");
writer.WriteAttributeString("Strasse", "Am Wald 1");
writer.WriteValue("Germany");
writer.WriteEndElement();
// Endtag von 'Person'
writer.WriteEndElement();
// Endtag des Stammelements
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
Console.WriteLine(@"Datei D:\Personen.xml erzeugt.");
Console.ReadLine();
}

Listing 14.31 Das Beispielprogramm »XmlWriterSample«

Die XML-Datei sieht nach der Ausführung des Programms folgendermaßen aus:

<?xml version="1.0" encoding="utf-8"?>
<Personen>
<!--Die Datei wurde mit XmlWriter erzeugt-->
<Person>
<Zuname>Kleynen</Zuname>
<Vorname>Peter</Vorname>
<Adresse Ort="Eifel" Strasse="Am Wald 1">Germany</Adresse>
</Person>
</Personen>

Listing 14.32 Aus Listing 14.31 erzeugte Datei

Namespaces festlegen

Manchmal ist es zwingend erforderlich, Elemente einem bestimmten Namespace zuzuordnen, um sie eindeutig zuordnen und interpretieren zu können. Im Beispiel oben wurde darauf vollkommen verzichtet. Das wollen wir nun nachholen.

Möchten Sie einen Standard-Namespace für alle Elemente des XML-Dokuments beschreiben, rufen Sie die Überladung der Methode WriteStartElement auf, die zwei Parameter definiert. Dem ersten übergeben Sie den Elementbezeichner und dem zweiten den gewünschten Namespace. Mit

writer.WriteStartElement("Personen", "http://www.MyNS.com");

wird das Element Personen wie folgt in das Ziel geschrieben:

<Personen xmlns="http://www.MyNS.com">

Eine weitere Überladung mit drei Parametern gestattet es, ein Präfix festzulegen. Dieses wird dem ersten Parameter übergeben, die Reihenfolge der beiden folgenden entspricht der zweifach parametrisierten Variante.

writer.WriteStartElement("x", "Personen", "http://www.MyNS.com");

Nun sieht das Element Personen folgendermaßen aus:

<x:Personen xmlns:x="http://www.MyNS.com">

Die untergeordneten Elemente gehören nicht automatisch diesem Namensraum an, sondern müssen dem Namespace ausdrücklich zugeordnet werden. Dabei hilft ebenfalls die dreiparametrige Überladung der Methode WriteStartElement weiter:

writer.WriteStartElement("x", "Personen", "http://www.MyNS.com");
writer.WriteStartElement("x", "Person", "http://www.MyNS.com");

Wichtig dabei ist, dass beide Namespace-Angaben absolut identisch sind, auch hinsichtlich der Groß-/Kleinschreibung. Nur dann wird das Element Person dem unter dem Element Personen angegebenen Namespace zugeordnet. Das aufgeführte Präfix spielt keine Rolle.

<x:Personen xmlns:x="http://www.MyCompany.com">
<x:Person>

Geben Sie einen abweichenden Namespace an, wird das als neuer Namensraum interpretiert. Dann sollten Sie aber auch ein anderes Präfix benutzen.

In einigen XML-Dokumenten werden mehrere Namespaces im Stammelement definiert. Eine passende Überladung der Methode WriteStartElement gibt es dafür nicht. Abhilfe schafft die Methode WriteAttributString, die ebenfalls überladen ist und eine drei- und vierparametrige Variante bereitstellt. Letztgenannte wollen wir uns an einem Beispiel ansehen.

writer.WriteStartElement("Personen");
writer.WriteAttributeString("xmlns","x", null,"http://www.MyNS.de");

Dem ersten Parameter wird das Namespace-Präfix des Attributs übergeben, dem zweiten der Bezeichner des Attributs. Dabei handelt es sich um das Präfix, das den Elementen zur Identifizierung vorangestellt wird. Ist das Attribut einem spezifischen Namespace zugeordnet, ist dieser dem dritten Parameter zu übergeben. Hier ist der Wert null angegeben, da es sich bei xmlns um ein reserviertes Attribut handelt. Der vierte und letzte Parameter erwartet den Wert des Attributs. Die beiden Anweisungen werden zu folgender Ausgabe führen:

<Personen xmlns:x="http://www.MyNS.de">

Beispielprogramm

Wir wollen uns nun ein Beispiel ansehen, das das folgende XML-Dokument mittels Code erzeugt. Dabei werden zwei Namespaces definiert: ein Standard-Namespace und ein spezifischer Namespace, dem das Präfix »x« zugeordnet wird. Die Elemente Personen, Person, Zuname und Vorname sollen dem spezifischen Namespace zugeordnet werden, das Element Adresse dem Standard-Namespace.

<?xml version="1.0" encoding="utf-8"?>
<x:Personen xmlns="http://www.MyDefaultNS.de"
xmlns:x="http://www.MyNS.de">
<x:Person>
<x:Zuname>Kleynen</x:Zuname>
<x:Vorname>Peter</x:Vorname>
<Adresse Ort="Eifel" Strasse="Am Wald 1">Germany</Adresse>
</x:Person>
</x:Personen>

Listing 14.33 Das resultierende XML-Dokument des Listings 14.34

Dazu nun der Programmcode.

// Beispiel: ..\Kapitel 14\XmlWriterWithNamespaces
static void Main(string[] args) {
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " "; // 2 Leerzeichen
XmlWriter writer = XmlWriter.Create(@"D:\Personen.xml", settings);
writer.WriteStartDocument();
// Starttag des Stammelements
writer.WriteStartElement("x","Personen", "http://www.MyNS.de");
writer.WriteAttributeString("xmlns", "http://www.MyDefaultNS.de");
// Starttag von 'Person'
writer.WriteStartElement("x", "Person", "http://www.MyNS.de");
writer.WriteElementString("x", "Zuname", "http://www.MyNS.de", "Kleynen");
string prefix = writer.LookupPrefix("http://www.MyNS.de");
writer.WriteElementString(prefix, "Vorname", "http://www.MyNS.de", "Peter");
// Element mit Attributen
writer.WriteStartElement("Adresse");
writer.WriteAttributeString("Ort", "Eifel");
writer.WriteAttributeString("Strasse", "Am Wald 1");
writer.WriteValue("Germany");
writer.WriteEndElement();
// Endtag von 'Person'
writer.WriteEndElement();
// Endtag des Stammelements
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
Console.WriteLine(@"Datei D:\Personen.xml erzeugt.");
Console.ReadLine();
}

Listing 14.34 XML-Dokument mit Namespaces erzeugen

Der Code enthält neben den schon zuvor behandelten Methoden zur Erzeugung von Elementen, Attributen und Namespaces nur eine Methode, die bisher noch nicht erwähnt worden ist: LookupPrefix. Dieser wird in Form einer Zeichenfolge ein Namespace-URI übergeben, der Rückgabewert ist das dazugehörende Präfix.


Rheinwerk Computing - Zum Seitenanfang

14.6.1 Die Methoden der Klasse »XmlWriter«Zur vorigen Überschrift

Die folgende Tabelle enthält die wohl wichtigsten Methoden der Klasse XmlWriter. Die meisten davon sind in diesem Abschnitt genau erläutert und in den Beispielprogrammen verwendet worden.

Tabelle 14.8 Methoden der Klasse »XmlWriter«

Methode Beschreibung

LookupPrefix

Liefert das Präfix, das im aktuellen Namespace-Bereich für den angegebenen Namespace-URI definiert ist.

WriteStartDocument

Schreibt die XML-Deklaration mit der Version 1.0.

WriteEndDocument

Setzt den XmlWriter in den Anfangszustand.

WriteStartElement

Schreibt das Starttag.

WriteEndElement

Schreibt das Endtag.

WriteElementString

Schreibt ein Element mit einem Zeichenfolgewert.

WriteAttributeString

Schreibt ein Attribut mit dem angegebenen Wert.

WriteComment

Schreibt einen Kommentar.

WriteStartAttribute

Schreibt ein Attribut.

WriteEndAttribute

Beendet das mit WriteStartAttribute eingeleitete Attribut.

WriteCData

Schreibt einen <![CDATA[...]]>-Block mit dem angegebenen Text.

WriteValue

Schreibt einen typisierten Wert (z. B. DateTime, Double, Int64).

WriteString

Schreibt einen Textinhalt.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Visual C# 2012

Visual C# 2012
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Rheinwerk-Shop: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: C++ Handbuch






 C++ Handbuch


Zum Rheinwerk-Shop: C/C++






 C/C++


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern