.NET Klasse aus XSD erstellen und XML daraus generieren

Wenn man ein XML Dokument erstellen möchte, welches auf einem XSD basiert muss man 2 Schritte durchführen:

1) Erstellen der .NET Klasse basierend auf Eurem XSD
2) Eine neue Instanz der Klasse erstellen und die Ausgabe serialisieren

Schritt 1 – Erstellen der .NET Klasse basierend auf Eurem XSD

Eine XSD Datei stellt den Entwurf für die Klasse zur Verfügung.

Hier ist eine Beispiel-XSD-Datei:

<?xml version="1.0" encoding="utf-8"?>
    <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="Person" nillable="true" type="Person" />
      <xs:complexType name="Person">
        <xs:sequence>
          <xs:element minOccurs="0" maxOccurs="1" name="Vorname" type="xs:string" />
          <xs:element minOccurs="0" maxOccurs="1" name="Nachname" type="xs:string" />
          <xs:element minOccurs="1" maxOccurs="1" name="Geburtstag" type="xs:dateTime" />
          <xs:element minOccurs="1" maxOccurs="1" name="Geschlecht" type="Gender" />
          <xs:element minOccurs="1" maxOccurs="1" name="Größe" type="xs:int" />
          <xs:element minOccurs="1" maxOccurs="1" name="Gewicht" type="xs:decimal" />
        </xs:sequence>
      </xs:complexType>
      <xs:simpleType name="Geschlecht">
        <xs:restriction base="xs:string">
          <xs:enumeration value="maennlich" />
          <xs:enumeration value="weiblich" />
        </xs:restriction>
      </xs:simpleType>
</xs:schema>

Jetzt speichert Eure XSD Datei in einem Ordner ab, ich nehme hier im Beispiel „C:\SampleProject\person.xsd“.

Nun wird die Datei mit XSD.exe in eine Klasse konvertiert.

Die XSD.exe befindet sich, je nach gewünschten Ziel-.NET-Framework z.B. hier:

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\xsd.exe

Öffnet nen die Eingabeaufforderung und wechselt in den eben ermittelten Pfad.

Jetzt werden wir die .NET Klasse erstellen. Die einzelnen Kommandos sind zu Erläuterungszwecken mit einem Zeilenumbruch versehen:

xsd.exe -xsd ausführen
/classes -Klasse erstellen
/language:vb -Sprache die verwendet werden soll (VB, CS, JS)
/out:“c:\sampleproject\“ -Ausgabeverzeichnis
c:\sampleproject\person.xsd -XSD Datei, die benutzt werden soll

Hier ist das Kommando nochmal in einer Zeile:

xsd.exe c:\sampleproject\person.xsd /classes /language:vb /out:c:\sampleproject\

Nachdem das Erstellen abgeschlossen ist, könnt Ihr die neu erstellte c:\sampleproject\person.vb zu Eurem Projekt hinzufügen.


Schritt 2 – Eine neue Instanz der Klasse erstellen und die Ausgabe serialisieren

Da wir die neue Klasse nun hinzugefügt haben, können wir eine Instanz davon erstellen:

Dim person As New Person

person.Vorname = "Max"
person.Nachname = "Mustermann"
person.Geschlecht = Geschlecht.maennlich
person.Größe = 170
person.Gewicht = 78.3

Jetzt können wir die Klasse zu einer XML Datei serialisieren:

Dim serializer As New XmlSerializer(GetType(Person))
Dim writer As New StreamWriter("c:\sampleproject\person.xml")
serializer.Serialize(writer, person)
writer.Close()

Das Zurücklesen der XML Datei in die erstellte Klasse geht wie folgt:

Dim serializer As New XmlSerializer(GetType(Person))
Dim reader As New IO.StreamReader("c:\sampleproject\person.xml")
Dim personRes As Person = serializer.Deserialize(reader)
reader.Close()
reader.Dispose()

2 Gedanken zu „.NET Klasse aus XSD erstellen und XML daraus generieren“

  1. Hallo,
    ich habe mit dieser Methode die XSD Datei von OpenImmo in mein Projekt integriert. Das funktioniert auch gut. In der Klasse gibt es aber nun sehr viele Unterklassen die ich befüllen muss. Mit dem Beispiel hier kann ich aber immer nur eine Unterklasse in eine XML Datei schreiben. Wie bekomme ich es hin mehrere Unterklassen aus den Gesamtklasse in eine XML Datei zu schreiben?
    Für weitere Hilfe wäre ich sehr dankbar.
    VG
    Ulli

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert