Подтвердить что ты не робот

Как создать схему XSD из класса?

Мне сложно с файлами XSD.

Я пытаюсь создать XSD файл из класса:

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
{
    // ...
}

Обратите внимание, что у меня есть абстрактный класс внутри Конфигурации. С помощью этой функции можно создать XSD и, если возможно, как?

Идея состоит в том, чтобы передать конфигурацию класса в XSD.

4b9b3361

Ответ 1

Вы можете использовать XSD.exe (Доступно из вашей установки Visual Studio.)

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 {   }

приводит к

<?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>

Все, что вам нужно сделать, это компилировать сборку и запустить XSD.exe с помощью пути к вашей сборке в качестве аргумента. XSD.exe /? содержит список всех аргументов.

Пример: XSD.exe C:\Dev\Project1\Bin\Debug\library.dll

Ответ 2

Вы можете успешно интегрировать xsd.exe в IDE Visual Studio следующим образом:

Перейдите в Tools, External Tools и нажмите кнопку Add:

2010

enter image description here

2015/2017

введите описание изображения здесь

Название:

Создать схему из класса

Команда (для каждого фреймворка):

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

Аргументы:

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

Использовать окно вывода:

Предотвращает появление дополнительного окна команд и ведет запись вывода до тех пор, пока вы его не очистите. Вероятно, хорошая идея.

Запрос для аргументов:

Проверьте, хотите ли вы протестировать вывод или устранить неисправность; в противном случае оставьте непроверенным.

Нажмите OK

Как использовать:

  • Скомпилируйте свой проект! xsd.exe смотрит только на скомпилированный код.
  • Щелкните по классу в обозревателе решений.
  • Нажмите Tools, Create Schema From Class
  • Нажмите кнопку Show All Files в обозревателе решений.
  • Посмотрите в ту же папку, что и ваш класс, и вы увидите Schema0.xsd.
  • Щелкните правой кнопкой мыши по Schema0.xsd и выберите Include In Project
  • Переименуйте Schema0.xsd в <the name of the class>.xsd
  • (необязательно) Возможно, вам придется отредактировать этот новый xsd вручную, если вы хотите отредактировать xml файлы в редакторе xml с использованием этой схемы, и вы не используете все атрибуты. Вы можете заменить use="required" на use="optional", чтобы избавиться от синих squiggly строк в редакторе xml (которые создают предупреждения), если действительно эти атрибуты не требуются.