Posso generare una classe C # da un file XML?
Posso generare una classe C # da un file XML?
Risposte:
Sì, utilizzando 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'.
Appunti
Rispondi come modificare la directory nel Prompt dei comandi per gli sviluppatori in d: \ temp può essere utile.
Se si generano classi per array multidimensionali, è presente un bug nel generatore XSD.exe, ma esistono soluzioni alternative .
xsd
eseguire il Prompt dei comandi per sviluppatori per VS2013 nel menu Strumenti.
xsd.exe
può essere trovato sotto:C:\Program Files (x86)\Microsoft SDKs\Windows
xsd.exe
stato trovato: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
Se stai lavorando su un progetto .NET 4.5 in VS 2012 (o più recente), puoi semplicemente incollare il tuo file XML come classi.
EDIT > Paste Special > Paste XML As Classes
xsd
, ma l'output è più o meno lo stesso.
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; }
e `private \ w + \ w + Field; \ r \ n \ r \ n`
All'inizio pensavo che lo speciale pasta fosse il santo graal! Ma poi l'ho provato e i miei capelli sono diventati bianchi proprio come il film di Indiana Jones.
Ma ora uso http://xmltocsharp.azurewebsite.net/ e ora sono più giovane che mai.
Ecco un segmento di ciò che ha generato:
namespace Xml2CSharp
{
[XmlRoot(ElementName="entry")]
public class Entry {
[XmlElement(ElementName="hybrisEntryID")]
public string HybrisEntryID { get; set; }
[XmlElement(ElementName="mapicsLineSequenceNumber")]
public string MapicsLineSequenceNumber { get; set; }
Mi rendo conto che questo è un post piuttosto vecchio e probabilmente sei passato oltre.
Ma ho avuto lo stesso problema, quindi ho deciso di scrivere il mio programma.
Il problema con il percorso "xml -> xsd -> classes" per me era che generava solo un grumo di codice che era completamente irraggiungibile e alla fine ho finito per modificarlo.
Non è in alcun modo elegante ma ha fatto il lavoro per me.
Puoi ottenerlo qui: ti preghiamo di dare suggerimenti se ti piace.
Dovresti considerare svcutil ( domanda svcutil )
Sia xsd.exe che svcutil operano sul file di schema XML (.xsd). Il tuo XML deve essere conforme a un file di schema per essere utilizzato da uno di questi due strumenti.
Si noti che esistono anche vari strumenti di terze parti per questo.
Puoi usare xsd come suggerito da Darin.
Inoltre, si consiglia di modificare il file test.xsd per creare uno schema più ragionevole.
type="xs:string"
può essere modificato in type="xs:int"
per i valori interi
minOccurs="0"
può essere modificato minOccurs="1"
dove è richiesto il campo
maxOccurs="unbounded"
può essere modificato in maxOccurs="1"
cui è consentito un solo elemento
Puoi creare xsd-s più avanzati se vuoi convalidare ulteriormente i tuoi dati, ma questo ti darà almeno ragionevoli tipi di dati nel c # generato.
Utilizzare la sintassi seguente per creare la classe dello schema dal file XSD.
C:\xsd C:\Test\test-Schema.xsd /classes /language:cs /out:C:\Test\
Per convertire XML in una classe C #:
Nota: nella pienezza dei tempi, questa app potrebbe essere sostituita, ma è probabile che ci sarà un altro strumento che fa la stessa cosa.