Generieren von XML-Datei in C# mit XSD-Datei
Ich versuche, erstellen Sie eine neue XML-Datei mit C# unter Verwendung einer vorhandenen XSD-Datei.
dies ist die xsd-Datei :
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="KilometerUpload">
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="unbounded" name="KilometerRegistration">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ChassisNumber">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="17" />
<xsd:minLength value="1" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="KilometerStatus">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="7" />
<xsd:minLength value="1" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="TypeOfData">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="3" />
<xsd:minLength value="1" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="ObservationDate">
<xsd:annotation>
<xsd:documentation>Format: yyyyMMdd</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="8" />
<xsd:minLength value="8" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="LegallyResponsible">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="10" />
<xsd:minLength value="10" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="EnteredBy">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="10" />
<xsd:minLength value="10" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="InternalCode">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="10" />
<xsd:minLength value="0" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="DateFirstRegistration">
<xsd:annotation>
<xsd:documentation>Format: yyyyMMdd</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="8" />
<xsd:minLength value="0" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Unifier">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="2" />
<xsd:minLength value="0" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="FeedbackType" type="FeedbackType" use="optional"/>
<xsd:attribute name="FeedbackEmail" type="xsd:string" use="optional"/>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="FeedbackType">
<xsd:annotation>
<xsd:documentation>The feedback type for this file</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="FTP" />
<xsd:enumeration value="EML" />
<xsd:enumeration value="DEF" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
Ich getan haben, die folgenden Dinge zu erstellen, die XML-Datei :
- aus einer Klasse mit xsd.exe
- Ich fügte hinzu, die Klasse zu meinem Projekt
-
schrieb die folgende Funktion :
var data = new KilometerUploadKilometerRegistration { ChassisNumber = huidigefactuur.Wagen.Chassisnummer, KilometerStatus = huidigefactuur.KMStand.ToString(), TypeOfData = "120", }; var serializer = new XmlSerializer(typeof(KilometerUploadKilometerRegistration)); using (var stream = new StreamWriter("C:\\test.xml")) serializer.Serialize(stream, data);
Funktioniert das erstellen der XML-Datei aber ich brauche zum starten bei KilometerUpload Knoten und als der KilometerRegistration Knoten wie Mach ich das?
Dies ist die Ausgabe die ich bekomme mit dem code, den ich oben verwendet :
<?xml version="1.0" encoding="UTF-8"?>
-<KilometerUploadKilometerRegistration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ChassisNumber>WVWZZZ3CZ7E201402</ChassisNumber>
<KilometerStatus>78000</KilometerStatus>
<TypeOfData>120</TypeOfData>
</KilometerUploadKilometerRegistration>
Dank !
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich die Antwort gefunden :
Dies ist der code den ich am Ende mit, es funktioniert nun perfekt :
Ihre serialiser ist bei
KilometerUpdateKilometerRegistration
haben Sie es versucht haben, dass beischreiben einer xml-Datei, die Sie verwenden können, XmlWriter-Klasse.
hier ist ein tutorial
http://www.dotnetperls.com/xmlwriter
Aufbau einer xml aus xsd-im code wird mühsam werden. In der Vergangenheit habe ich die XMLSampleGenerator von Priya Lakshminarayanan. Der Quellcode zu diesem Projekt gefunden hier.
Brauchte ich ganz schön viel zu tun, was Sie wollten, aber die Probe generation von visual studio war nicht ausreichend. Die XmlSampleGenerator ich einen link bereitgestellt ist, ähnlich wie die VS sample-generation, aber offensichtlich haben Sie den source-code, und als solche können Sie Debuggen und anpassen, um Ihre Bedürfnisse (in meinem Fall brauchte ich die richtige Probe regex-Ausdruck generation).
Ein Wort der Warnung: das Erzeugen von XML-Dateien aus einer xsd ist keine leichte Aufgabe, so dont erwarten, dass es. Viel Glück.
Edit: Dieser code generiert eine Xml enthält auch ein KilometerUpload Knoten.
- Und dies ist der generierte Xml:
Halten Sie daran, dass dies in der Tat NICHT die Erzeugung von xml-Code aus einem xsd -! Wenn Ihr xsd-änderungen, die Sie haben, um größere änderungen an den Klassen und so.