Lesen und Schreiben von XML-Dokumenten (C++)
Nachdem Sie anhand des Schemas "Library" (siehe Beispielschema) Code generiert haben, wird eine C#-Testapplikation sowie eine Reihe von unterstützenden Altova-Bibliotheken generiert.
Informationen zu den generierten C++-Bibliotheken
Die zentrale Klasse des generierten Codes ist die Klasse CDoc. Sie repräsentiert das XML-Dokument. Eine solche Klasse wird für jedes Schema generiert. Ihr Name hängt vom Namen der Schemadatei ab. Wie im Diagramm gezeigt, bietet diese Klasse Methoden zum Laden von Dokumenten aus Dateien, Binär-Streams oder Strings (oder zum Speichern von Dokumenten in Dateien, Streams, Strings). In der Referenz zur Klasse ([YourSchema]::[CDoc]) finden Sie eine Beschreibung aller von dieser Klasse bereitgestellten Members.
Das Feld Library der Klasse CDoc stellt die eigentliche Root des Dokuments dar. Library ist ein Element in der XML-Datei, daher hat es im C++-Code eine Vorlagenklasse als Typ (MemberElement). Die Vorlagenklasse stellt Methoden und Eigenschaften für die Interaktion mit dem Element Library bereit. Im Allgemeinen erhält jedes Attribut und jedes Element eines bestimmten Typs im Schema im generierten Code die Vorlagenklasse MemberAttribute bzw. MemberElement. Nähere Informationen dazu finden Sie in der Referenz zur Klasse unter [YourSchema]::MemberAttribute und [YourSchema]::MemberElement.
Die Klasse CLibraryType wird anhand des complexType LibraryType im Schema generiert. Beachten Sie, dass die Klasse CLibraryType ein Feld Book und ein Feld LastUpdated enthält. Gemäß der oben erwähnten Logik entsprechen diese dem Element Book und dem Attribut LastUpdated im Schema. Sie ermöglichen die programmatische Bearbeitung (Anhängen, Entfernen, usw.) von Elementen und Attributen im XML-Instanzdokument.
Der Typ DictionaryType ist ein complexType, der im Schema von BookType abgeleitet wurde, daher wird diese Beziehung auch in den generierten Klassen übernommen. Im Diagramm sehen Sie, dass die Klasse CDictionaryType die Klasse CBookType erbt.
Wenn in Ihrem XML-Schema simpleTypes als Enumerationen definiert sind, so stehen die enumerierten Werte im generierten Code als Enum-Werte zur Verfügung. In dem in diesem Beispiel verwendeten Schema gibt es die Buchformate hardcover, paperback, e-book, usw. Im generierten Code stehen diese Werte folglich in Form einer Enum, d.h. als Member der Klasse CBookFormatType, zur Verfügung.
Schreiben eines XML-Dokuments
1.Öffnen Sie die anhand des Schemas "Library" generierte Lösung LibraryTest.sln in Visual Studio.
Beim Erstellen eines Prototyps einer Applikation anhand eines häufig geänderten XML-Schemas müssen Sie eventuell immer wieder Code im selben Verzeichnis generieren, damit die Änderungen am Schema sofort im Code berücksichtigt werden. Beachten Sie, dass die generierte Testapplikation und die Altova-Bibliotheken jedes Mal, wenn Sie Code im selben Zielverzeichnis generieren, überschrieben werden. Fügen Sie daher keinen Code zur generierten Testapplikation hinzu, sondern integrieren Sie stattdessen die Altova-Bibliotheken in Ihr Projekt (siehe Integrieren von Schema Wrapper-Bibliotheken). |
2.Öffnen Sie die Datei LibraryTest.cpp im Solution Explorer und bearbeiten Sie die Methode Example() wie unten gezeigt.
#include <ctime> // required to get current time |
3.Drücken Sie F5, um den Debugger zu starten. Wenn der Code erfolgreich ausgeführt wurde, wird im Lösungsausgabeverzeichnis die Datei GeneratedLibrary.xml erstellt.
Lesen eines XML-Dokuments
1.Öffnen Sie die Lösung LibraryTest.sln in Visual Studio.
2.Speichern Sie den unten gezeigten Code unter dem Namen Library1.xml in einem Verzeichnis, das vom Programmcode gelesen werden kann (z.B im selben Verzeichnis wie LibraryTest.sln).
<?xml version="1.0" encoding="utf-8"?> |
3.Öffnen Sie die Datei LibraryTest.cpp im Solution Explorer und bearbeiten Sie die Methode Example() wie unten gezeigt.
using namespace Doc; |
4.Drücken Sie F5, um den Debugger zu starten.