Générer fichier XML en C# avec le fichier XSD
Je suis en train de construire un nouveau fichier XML avec C# à l'aide d'un existant fichier XSD.
c'est le fichier xsd :
<?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>
J'ai fait les choses suivantes pour créer le fichier XML :
- fait une classe avec xsd.exe
- J'ai ajouté à la classe de mon projet
-
a écrit la fonction suivante :
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);
Il travaille pour créer le fichier XML, mais j'ai besoin de commencer à KilometerUpload nœud et que la KilometerRegistration nœud comment dois-je faire?
C'est le résultat que j'obtiens avec le code que j'ai utilisé ci-dessus :
<?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>
Merci !
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la réponse :
C'est le code que j'ai terminé, il fonctionne parfaitement maintenant :
votre serialiser est à
KilometerUpdateKilometerRegistration
avez-vous essayé de mettre le tout aud'écrire un fichier xml, vous pouvez utiliser la classe XmlWriter.
voici un tutoriel
http://www.dotnetperls.com/xmlwriter
La construction d'un xml à partir d'xsd dans le code va être fastidieux. Dans le passé, j'ai utilisé le XMLSampleGenerator par Priya Lakshminarayanan. Le code source de ce projet particulier est trouvé ici.
J'avais besoin de faire à peu près ce que tu voulais, mais l'exemple de génération de visual studio n'était pas suffisant. Le XmlSampleGenerator j'ai fourni un lien est semblable à celle du VS exemple de génération, mais, évidemment, vous avez le code source, et comme vous pouvez déboguer et de l'adapter à vos besoins (dans mon cas, j'avais besoin échantillon expression regex génération).
Un mot d'avertissement: Générer xmls à partir d'un fichier xsd est pas une tâche facile, donc ne vous attendez pas à être. Bonne chance.
Edit: Ce code va générer un fichier Xml qui contient également un KilometerUpload Nœud.
Et c'est le Xml généré:
Ne garder à l'esprit que ce n'est PAS de produire un document xml à partir d'un fichier xsd! Si votre xsd changements à apporter d'importants changements de classes et de ces.