Можем ли мы контролировать имя типа в классе, созданном инструментом xsd.exe

Инструмент xsd.exe генерирует классы для данного файла xsd. Он следует шаблону для именования типа. Например,

<Students>
  <Student Name="A" RollNo="1" Address="Some Address">
    <Department Id="20" Name="CSE"/>
  </Student> 
</Students>

xsd.exe /c Students.xsd

Файл Students.cs создан. Если мы видим тип для элементов

Element     Type Name
Students    Students
Student     StudentsStudent
Department  StudentsStudentDepartment

Он генерирует тип, добавляя префикс имени родительского элемента, если элемент является дочерним. Можем ли мы контролировать это имя? Мне нужно имя типа так же, как имя элемента. Студент => Студент, отдел => Отдел

Заранее спасибо

1 ответ

В общем случае нельзя настроить имена сгенерированных классов при использовании xsd.exe - в отличие от механизмов, доступных в других местах, например, для пользователя JAXB через пользовательский файл привязки JAXB.

Однако для xsd.exe сгенерированные имена классов зависят от стиля разработки. То, что вы описали, генерируется, когда авторский стиль соответствует "русской кукле", то есть как показано ниже:

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Students">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Student">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Department">
                <xsd:complexType>
                  <xsd:attribute name="Id" type="xsd:unsignedByte" use="required" />
                  <xsd:attribute name="Name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="Name" type="xsd:string" use="required" />
            <xsd:attribute name="RollNo" type="xsd:unsignedByte" use="required" />
            <xsd:attribute name="Address" type="xsd:string" use="required" />
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

Если вы измените его стиль на что-то другое (это называется жалюзи):

<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="Students" type="Students"/>
    <xsd:complexType name="Students">
        <xsd:sequence>
            <xsd:element name="Student" type="Student"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="Student">
        <xsd:sequence>
            <xsd:element name="Department" type="Department"/>
        </xsd:sequence>
        <xsd:attribute name="Name" type="xsd:string" use="required"/>
        <xsd:attribute name="RollNo" type="xsd:unsignedByte" use="required"/>
        <xsd:attribute name="Address" type="xsd:string" use="required"/>
    </xsd:complexType>
    <xsd:complexType name="Department">
        <xsd:attribute name="Id" type="xsd:unsignedByte" use="required"/>
        <xsd:attribute name="Name" type="xsd:string" use="required"/>
    </xsd:complexType>
</xsd:schema>

Вы получите эти сгенерированные классы:

Другие вопросы по тегам