Sandini Bib
XML mit .NET
Sandini Bib
.NET
Essentials
Die .NET Essentials greifen die wichtigsten Themen des .NET Frameworks auf und behandeln auf knappem Raum, was Sie wissen müssen, um sofort eigene .NET Anwendungen auf höchstem Niveau zu schreiben. Ohne umständliche Einführung kommen Sie umgehend zum Kern des jeweiligen Themas und finden Antworten auf Fragen, mit denen Sie sich beim Codieren immer wieder konfrontiert sehen. Die Autoren zeigen Lösungen auf, die Sie übernehmen oder variieren und in eigene Projekte integrieren können: GDI+
Web Forms
Ellen Diehl, Thomas Ehrenberg 192 Seiten € 16,95 [D]/sFr 27,50 ISBN 3-8273-1993-5
Holger Schwichtenberg 144 Seiten EUR 16,95 [D]/sFr 27,50 ISBN 3-8273-2010-0
Grafikprogrammierung mit System.Drawing – Vektorgrafiken, Bildbearbeitung, Texteffekte – inkl. Farbteil
Web Forms – ASP.NET-Programmierung mit System.Web.UI: Webcontrols, Ereignisse, State Management, Datenbindung, User Controls, Debugging
Windows Forms
ADO.NET
Michael Kofler 176 Seiten € 16,95 [D]/sFr 27,50 ISBN 3-8273-1994-3
Ralf Westphal 144 Seiten € 16,95 [D]/sFr 27,50 ISBN 3-8273-1997-8
Grafische Benutzerschnittstellen mit System.Windows.Forms – Formularinterna, mehrere Fenster, Multithreading, Zwischenablage, Drag&Drop
Datenbankprogrammierung mit System.Data: relationale Datenbanken für ADO.NET, komplexe hierarchische Daten, Fehlerbehandlung
Weitere Informationen finden Sie unter www.dotnet-essentials.de.
Unser Online-Tipp für noch mehr Wissen
... aktuelles Fachwissen rund um die Uhr — zum Probelesen, Downloaden oder auch auf Papier.
www.InformIT.de
Sandini Bib
.NET
Essentials
Armin Hanisch
XML mit .NET Programmierung und Basisklassen
An imprint of Pearson Education München • Boston • San Francisco • Harlow, England Don Mills, Ontario • Sydney • Mexico City Madrid • Amsterdam
Sandini Bib
Die Deutsche Bibliothek – CIP-Einheitsaufnahme Ein Titeldatensatz für diese Publikation ist bei Der Deutschen Bibliothek erhältlich. Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt. Bei der Zusammenstellung von Abbildungen und Texten wurde mit größter Sorgfalt vorgegangen. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar. Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien. Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig. Fast alle Hardware- und Softwarebezeichnungen, die in diesem Buch erwähnt werden, sind gleichzeitig eingetragene Warenzeichen oder sollten als solche betrachtet werden. Umwelthinweis: Dieses Produkt wurde auf chlorfrei gebleichtem Papier gedruckt. Die Einschrumpffolie – zum Schutz vor Verschmutzung – ist aus umweltverträglichem und recyclingfähigem PE-Material.
5 05
4 04
3
2
1
03
02
ISBN 3-8273-1998-6 © 2002 by Addison-Wesley Verlag, ein Imprint der Pearson Education Deutschland GmbH, Martin-Kollar-Straße 10–12, D-81829 München/Germany Alle Rechte vorbehalten Einbandgestaltung: Barbara Thoben, Köln Lektorat: Christine Auf,
[email protected], Tobias Draxler,
[email protected] Korrektorat: Katja Treu, München Herstellung: Monika Weiher,
[email protected] Satz: reemers publishing services gmbh, Krefeld, www.reemers.de Druck und Verarbeitung: Media-Print, Paderborn Printed in Germany
Sandini Bib
.NET
Essentials
Inhalt Einführung
7
Vorwort Voraussetzungen Typografie Beispielcodes, Errata, Hinweise
7 7 8 8
1
XML-Basics
9
1.1 1.2 1.3 1.4
XML-Terminologie Namensräume Die .NET-Namensräume Unterstützte Standards
9 11 13 13
2
XmlReader und XmlWriter
15
2.1 2.2 2.3
Lesen von XML-Daten Schreiben von XML-Dateien Zusammenfassung
15 21 26
3
Serialisierung und XML
27
3.1 3.2
XML-Serialisierung im Detail Zusammenfassung
32 37
4
Document Object Model
39
4.1 4.2 4.3 4.4 4.5
Streaming oder DOM? XML-Dokumente laden und lesen Ändern von XML-Dokumenten per DOM Ereignisbehandlung Zusammenfassung
39 39 44 48 52
5
XPath-Abfragen
53
5.1 5.2 5.3 5.4 5.5
Warum XPath? Grundlagen SelectNodes und SelectSingleNode Nutzung des XPathNavigators Zusammenfassung
53 53 59 61 65
6
XML-Namensräume
67
6.1 6.2
Einführung Zusammenfassung
67 77
5
Sandini Bib
.NET
Inhalt
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
Essentials
6
7
XSL-Transformationen
79
7.1 7.2 7.3 7.4 7.5
Grundlagen Stylesheets laden Transformation durchführen Transformationen verketten und optimieren Zusammenfassung
79 81 82 86 87
8
Validieren von XML
89
8.1 8.2 8.3
Warum ein Schema? XSD – der Standard Zusammenfassung
89 96 112
9
XML und Daten
113
9.1 9.2 9.3 9.4
Einführung DataSet und Co. XmlDataDocument Zusammenfassung
113 113 121 125
10
XML-Dokumentation
127
10.1 10.2
XML-Kommentare Zusammenfassung
127 134
11
Ausblick
135
Stichwortverzeichnis
137
Sandini Bib
.NET
Essentials
Einführung Vorwort Thema dieses Bandes sind die XML-Basisklassen des .NET-Frameworks und ihre Verwendung sowie die Rolle von XML als Basisinfrastruktur innerhalb der .NET-Umgebung. XML ist bereits seit einigen Jahren dabei, sich zur neuen ‚lingua franca’ innerhalb der IT-Welt zu entwickeln und auch Microsoft setzt im Rahmen der .NET Initiative auf XML. Es gibt wohl kaum einen Bereich innerhalb des .NET-Frameworks, in dem XML keine Rolle spielt. Als universelles Austausch- und Speicherformat wird es für Konfigurationsdateien, ADO.NET, die Objektserialisierung, Schemas und XSLT bis hin zu SOAP und Web Services als sprachneutrales Format benutzt. Als Entwickler haben Sie kompletten Zugriff auf eine Reihe von hochoptimierten und vollständigen Klassen, die nahezu jede Anforderung abdecken und über den Funktionsumfang der alten XML Core Services der COM-Welt (MSXML) weit hinausgehen. Mit nur wenigen Zeilen an Code sind Sie in der Lage, Daten zu transformieren, XML-Strukturen aufzubauen oder zu validieren und mit ADO.NET sogar beliebige XML-Dateien entweder als relationales DataSet oder als XML-Baumstruktur zu behandeln.
Voraussetzungen Benötigte Software Zum Nachvollziehen der Beispiele in diesem Buch benötigen Sie einen Rechner mit Windows 2000 oder Windows XP, Visual Studio .NET oder das .NET-Framework SDK. Die Beispiele zu diesem Buch finden Sie zum Download auf der Website für diese Buchreihe, die unter dem URL http://www.dotnet-essentials.de erreichbar ist. Dieses Buch geht davon aus, dass Sie zumindest das .NET-Framework und die Kommandozeilen-Tools installiert haben. Sie benötigen nicht unbedingt Visual Studio .NET, obwohl Sie im Kapitel über XML-Validierung und XMLDokumentation sicher davon profitieren, da die grafische Oberfläche doch einige Aufgaben erleichtert. Aber auch diese Kapitel enthalten Hinweise, wie Sie ohne das Visual Studio .NET zurechtkommen.
7
Sandini Bib
.NET
Einführung
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
Essentials
Vorkenntnisse Die Zielgruppe dieser Buchreihe sind Entwickler mit Programmiererfahrung, die sich bereits erfolgreich mit den Grundlagen von .NET und Visual Studio vertraut gemacht haben. Sie finden in diesen Bänden praktische Beispiele und kompakte Informationen ohne die endlose Wiederholung von Grundlagen. Der Autor geht davon aus, dass Sie C# beherrschen bzw. Code, der in C# geschrieben wurde, lesen können und mit der objektorientierten Programmierung vertraut sind. Aus Platzgründen sind viele Listings nicht komplett abgedruckt, sondern zeigen lediglich den Code einer (meist statischen) Methode ohne die Klassendefinition und die using-Anweisungen drumherum, da Sie sicher in der Lage sind, diese zu ergänzen. Wo es sinnvoll erschien oder bestimmte zusätzliche Namespaces eingebunden wurden, wurden komplette Listings abgedruckt. Die Quellcodes der Downloads sind natürlich alle vollständig.
Typografie Normaler Fließtext wird mit dieser Schriftart dargestellt. Falls innerhalb eines Textabsatzes einzelne Schlüsselwörter oder Klassen- bzw. Variablennamen vorkommen, werden diese als Klassenname hervorgehoben. Listings im Text besitzen diese Schriftart und wurden nach Möglichkeit so umbrochen, dass die Struktur trotz der geringen Spaltenbreite erhalten bleibt. Einzelne Listingszeilen erhalten diese Formatierung
Auswahlen in einem MENÜNAMEN oder als DIALOGOPTION werden ebenfalls besonders gekennzeichnet. Alle Dateinamen, URLs oder Pfadangaben sind wie hier gezeigt hervorgehoben.
Beispielcodes, Errata, Hinweise Die Beispielcodes zu diesem Band der Reihe .NET-Essentials finden Sie im Internet unter dem URL http://www.DotNet-Essentials.de. Hier finden Sie auch zusätzliche Hinweise, Ergänzungen und Korrekturen zu diesem und den anderen Bänden der Reihe. Alle Listings, Codeangaben und Verweise in diesem Buch wurden nach bestem Wissen und Gewissen auf Fehlerfreiheit geprüft. Sollten Sie dennoch einen Fehler finden oder Anregungen und Kommentare zu diesem Buch haben, freut sich der Autor auf Ihr Feedback.
8
Sandini Bib
.NET
Essentials
1
XML-Basics
1.1 XML-Terminologie Knoten, Elemente, Tags und Attribute Eine XML-Struktur (Struktur deshalb, da XML nicht notwendigerweise immer in einer Datei vorliegen muss, beispielsweise als MemoryStream) ist eine baumförmige Struktur. Dieser Baum besteht aus einzelnen Knoten oder Elementen, die in textueller Form durch entsprechende Tags dargestellt werden. Ein Element kann einen reinen Textinhalt oder Unterelemente (oder Kindknoten) besitzen, auch ein gemischter Inhalt aus Text und Unterelementen ist möglich. Je nach Programmiermodell (Streamingzugriff über XmlReader oder DOM-Zugriff über ein XmlDocument) wird diese XML-Struktur seriell gelesen und Element für Element an die Anwendung weitergegeben oder die komplette Datei wird gelesen und die Baumstruktur im Speicher aufgebaut (wobei hier der Ressourcenbedarf dementsprechend groß werden kann). Ein Element kann entweder ein XML-Element, ein Kommentar, eine Verarbeitungsanweisung an den XML-Parser oder Leerraum sein.
XML als Baum oder als Stream
Elemente können Attribute enthalten, die allerdings in keiner bestimmten Reihenfolge vorliegen müssen (der XML-Standard erlaubt ausdrücklich eine wechselnde Attributreihenfolge bei gleichen Elementen) und die daher in den XML-Klassen in einer ungeordneten Auflistung mitgeführt werden. Attribute besitzen einen Namen und einen Wert.
XML-Zeichen und XML-Einheiten Eine XML-Datei besteht aus verschiedenen Einheiten: Kommentaren, Leerraum, Verarbeitungsanweisungen oder Elementen. Auch hier gelten einige Regeln, ebenso wie für die Angabe von bestimmten Zeichen innerhalb einer XML-Datei. Leerraum wird innerhalb einer XML-Datei ignoriert oder beim Parsing mit beachtet, abhängig von der Einstellung der entsprechenden Klasse. Im .NET-Framework geschieht dies über eine Eigenschaft mit dem Namen PreserveWhitespace. Ist Leeraum innerhalb eines Elements von Bedeutung, beispielsweise für die Einrückung in einem Listing, dann sollten Sie das Attribut xml:space verwenden und einen Wert von "preserve" setzen. Der Defaultwert "default" legt fest, dass die Einstellungen des Parsers verwendet werden.
Leerraum
9
Sandini Bib
.NET
1 XML-Basics
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
Essentials
Kommentare
Ein Kommentar beginnt auch in XML mit der Zeichenfolge . Innerhalb eines Kommentars dürfen keine doppelten Bindestriche vorkommen. Kommentare sind nicht innerhalb eines Element-Tags erlaubt und dürfen auch nicht vor der ersten Verarbeitungsanweisung vorkommen, die eine XML-Datei als solche kennzeichnet (, Details s.u.).
PIs
Eine Verarbeitungsanweisung (processing instruction) ist kein Element, sondern eine Anweisung an den XML-Parser bzw. die Anwendung, eine bestimmte Aktion auszuführen oder eine Kennzeichnung für bestimmte Eigenschaften des Dokumentes. Diese beginnen immer mit der Zeichenkette .
CDATA
Soll ein Abschnitt oder Elementinhalt als regulärer Text aufgefasst werden, ohne dass der XML-Parser versucht, darin Markup zu erkennen, kann dieser Abschnitt als CDATA-Sektion (CDATA steht für character data) geschrieben werden. Dazu wird folgendes Konstrukt verwendet: , ohne dass der Parser über diese Zeichen stolpert ]]> Listing 1.1: Ein CDATA-Abschnitt
Entities
t
Sonderzeichen bzw. Entitäten beginnen in XML immer mit einem kaufmännischen Und-Zeichen (&) und enden mit einem Semikolon (;). Folgende Entities sind bereits vordefiniert: Entity
Bedeutung
&
Das &-Zeichen