Puis-je générer une classe C # à partir d'un fichier XML?
Puis-je générer une classe C # à partir d'un fichier XML?
Réponses:
Oui, en utilisant xsd.exe
D:\temp>xsd test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.xsd'.
D:\temp>xsd test.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'D:\temp\test.cs'.
Remarques
Il peut être utile de savoir comment modifier le répertoire de l'invite de commandes du développeur en d: \ temp.
Si vous générez des classes pour un tableau multidimensionnel, il existe un bogue dans le générateur XSD.exe, mais il existe des solutions de contournement .
xsd
exécutez l' invite de commande du développeur pour VS2013 dans votre menu d'outils.
xsd.exe
peut être trouvé sous:C:\Program Files (x86)\Microsoft SDKs\Windows
xsd.exe
été trouvé à: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
Si vous travaillez sur un projet .NET 4.5 dans VS 2012 (ou plus récent), vous pouvez simplement coller votre fichier XML en tant que classes.
EDIT > Paste Special > Paste XML As Classes
xsd
, mais la sortie est à peu près la même.
public (\w+) (\w+)\r\n +\{\r\n +get\r\n +\{\r\n +return this.*;\r\n +\}\r\n +set\r\n +\{\r\n +this.*;\r\n +\}\r\n +\}\r\n
=> public $1 $2 { get; set; }
et `private \ w + \ w + Field; \ r \ n \ r \ n`
Au début, je pensais que la pâte spéciale était le Saint Graal! Mais ensuite je l'ai essayé et mes cheveux sont devenus blancs comme le film Indiana Jones.
Mais maintenant j'utilise http://xmltocsharp.azurewebsites.net/ et maintenant je suis plus jeune que jamais.
Voici un segment de ce qu'il a généré:
namespace Xml2CSharp
{
[XmlRoot(ElementName="entry")]
public class Entry {
[XmlElement(ElementName="hybrisEntryID")]
public string HybrisEntryID { get; set; }
[XmlElement(ElementName="mapicsLineSequenceNumber")]
public string MapicsLineSequenceNumber { get; set; }
Je me rends compte que c'est un poste assez ancien et que vous avez probablement évolué.
Mais j'ai eu le même problème que vous, j'ai donc décidé d'écrire mon propre programme.
Le problème avec l'itinéraire "xml -> xsd -> classes" pour moi était qu'il venait de générer un morceau de code qui était complètement impossible à maintenir et j'ai fini par le turfer.
Il n'est en aucun cas élégant mais il a fait le travail pour moi.
Vous pouvez l'obtenir ici: veuillez faire des suggestions si vous l'aimez.
Vous devriez considérer svcutil ( question svcutil )
Xsd.exe et svcutil fonctionnent tous les deux sur le fichier de schéma XML (.xsd). Votre XML doit être conforme à un fichier de schéma à utiliser par l'un de ces deux outils.
Notez que divers outils tiers existent également pour cela.
Vous pouvez utiliser xsd comme suggéré par Darin.
De plus, il est recommandé de modifier le fichier test.xsd pour créer un schéma plus raisonnable.
type="xs:string"
peut être changé en type="xs:int"
pour des valeurs entières
minOccurs="0"
peut être changé en minOccurs="1"
où le champ est requis
maxOccurs="unbounded"
peut être changé en maxOccurs="1"
où un seul élément est autorisé
Vous pouvez créer des xsd-s plus avancés si vous souhaitez valider davantage vos données, mais cela vous donnera au moins des types de données raisonnables dans le c # généré.
Utilisez la syntaxe ci-dessous pour créer une classe de schéma à partir d'un fichier XSD.
C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\
Pour convertir XML en classe C #:
Remarque: dans le temps, cette application peut être remplacée, mais il y a de fortes chances qu'un autre outil fasse la même chose.