2012-04-04 17 views
38

Sto attraversando un periodo difficile con i file XSD.Come creare uno schema XSD da una classe?

sto cercando di creare un file XSD da una classe:

public enum Levels { Easy, Medium, Hard } 
public sealed class Configuration 
{ 
    public string Name { get;set; } 
    public Levels Level { get; set; } 
    public ConfigurationSpec { get;set;} 
} 

public abstract class ConfigurationSpec { } 
public class ConfigurationSpec1 
{ 
    // ... 
} 
public class ConfigurationSpec2 
{ 
    // ... 
} 

Si prega di notare che ho una classe astratta all'interno della configurazione. Con questa caratteristica, è possibile creare l'XSD e se è possibile come?

L'idea è passare la configurazione di classe all'XSD.

+0

È possibile utilizzare lo strumento [XML Schema Definition Tool (Xsd.exe) gratuito (http://msdn.microsoft.com/en-us/library/x6c1kb0s.aspx). –

risposta

26

È possibile utilizzare XSD.exe (disponibile presso lo Studio installazione di Visual.)

public sealed class Configuration 
{ 
public string Name { get; set; } 
public Levels Level { get; set; } 
public ConfigurationSpec Spec { get; set; } 
} 
public abstract class ConfigurationSpec { } 
public class ConfigurationSpec1 { } 
public class ConfigurationSpec2 { } 

risultati in

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Levels" type="Levels" /> 
    <xs:simpleType name="Levels"> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="Easy" /> 
     <xs:enumeration value="Medium" /> 
     <xs:enumeration value="Hard" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="Configuration" nillable="true" type="Configuration" /> 
    <xs:complexType name="Configuration"> 
    <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" /> 
     <xs:element minOccurs="1" maxOccurs="1" name="Level" type="Levels" /> 
     <xs:element minOccurs="0" maxOccurs="1" name="Spec" type="ConfigurationSpec" /> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="ConfigurationSpec" abstract="true" /> 
    <xs:element name="ConfigurationSpec" nillable="true" type="ConfigurationSpec" /> 
    <xs:element name="ConfigurationSpec1" nillable="true" type="ConfigurationSpec1" /> 
    <xs:complexType name="ConfigurationSpec1" /> 
    <xs:element name="ConfigurationSpec2" nillable="true" type="ConfigurationSpec2" /> 
    <xs:complexType name="ConfigurationSpec2" /> 
</xs:schema> 

Tutto quello che dovete fare è compilare l'assembly ed eseguire XSD.exe con il percorso assemblaggio come argomento. XSD.exe /? ha anche una lista di tutti gli argomenti.

Esempio: XSD.exe C:\Dev\Project1\Bin\Debug\library.dll

+1

Puoi dirmi quali passi hai seguito per generarlo? –

+0

Mi getta: Errore - Impossibile caricare file o assembly 'file: /// C: /../test.exe' o una delle sue dipendenze. Si è tentato di caricare un programma con un formato errato. –

+1

@DarfZon prova a cambiarlo con la stessa architettura del sistema operativo (x64, x86). – Peter

57

È possibile integrare con successo xsd.exe nella IDE di Visual Studio come questo:

Andate in Tools, External Tools e fare clic sul Aggiungi pulsante:

enter image description here

2015/2017

enter image description here

Titolo:

CREATE SCHEMA dalla classe

Command (per quadro):

4,0

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\xsd.exe

4.5.1

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\xsd.exe

4,6.*

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.* Tools\x64\xsd.exe

Argomenti:

$(BinDir)$(TargetName).dll /outputdir:$(ItemDir) /type:$(ItemFileName)

Usa finestra di output:

Impedisce una finestra di comando extra da popping up e mantiene un record di uscita fino a quando lo cancelli. Probabilmente una buona idea.

Prompt Per Argomenti:

Controllare se si desidera testare l'uscita o la risoluzione dei problemi; altrimenti, lasciare deselezionato.

clic su OK

Come si usa:

  1. compilare il progetto!XSD.exe guarda solo al codice compilato.
  2. Fare clic sulla classe in Solution Explorer.
  3. Clicca Tools, Create Schema From Class
  4. Cliccare sulla Mostra tutti i file pulsante nella Esplora soluzioni.
  5. Cerca nella stessa cartella della classe e vedrai Schema0.xsd.
  6. fare clic destro su Schema0.xsd e scegli Include In Project
  7. Rinominare Schema0.xsd a <the name of the class>.xsd
  8. (opzionale) Potrebbe essere necessario modificare questa nuova xsd a mano se si desidera modificare i file XML in l'editor XML utilizzando questo schema e si non stanno usando tutti gli attributi. È possibile sostituire use="required" con use="optional" per eliminare le linee ondulate blu nell'editor xml (che creano avvisi), se effettivamente questi attributi non sono richiesti.
+2

Non dimenticare il passaggio ** 1 Compila **, durante l'utilizzo, come ho fatto io.Mi ci è voluto un po 'di tempo per realizzare: $ –

+1

@ R. Schreurs, enfasi aggiunta. Grazie! – toddmo

+0

Questa risposta è molto bella. Grazie. Secondo te è possibile aggiungere i commenti scritti nella classe anche nel file di output XSD? – theLaw

Problemi correlati