Как создать схему 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.
Ответы
Ответ 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 (которые создают предупреждения), если действительно эти атрибуты не требуются.