Генерация вложенных типов вместо глобальных типов с помощью xsd.exe - PullRequest
3 голосов
/ 27 октября 2011

Используя xsd.exe в классе C #, есть ли способ создать xsd-файл с вложенным типом вместо глобальных типов?

Я хочу использовать этот xsd-файл с SSIS - Sql Server Integration Services и, похоже, SSIS не очень хорошо читает мой xsd.

Я хочу сгенерировать xsd следующим образом с вложенными типами:

  <?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Country">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="City">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="CityName" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="CoutryName" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

но xsd.exe производит это с глобальными типами, а SSIS не читает. Мне нужно изменить этот xsd вручную, чтобы быть как выше.

 <?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Country">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="City" type="City">
        </xs:element>
        <xs:element name="CoutryName" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="City">
    <xs:sequence>
      <xs:element name="CityName" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Есть предложения? Или другой инструмент, который я могу использовать.

Большое спасибо.

1 Ответ

4 голосов
/ 01 ноября 2011

Кроме того, я предполагаю, что «не очень хорошо» означает, что вы не видите CountryName в выходных данных источника XML.Документация по MSDN является хорошим чтением, хотя, на мой взгляд, она не описывает, почему вы столкнетесь с поведением, которое вы видите.

Я считаю, что это связано с тем, как XML Sourceвыходы определяются.SSIS выводит набор данных из структуры XML;сущность верхнего уровня, соответствующая корневому элементу, не отображается на выход, поэтому все связанные с ней атрибуты, в вашем случае CountryName, не будут отображаться.

Самый простой способ доказать это - добавить еще один корневой элемент, охватывающий вашу страну (эквивалентно наличию фиктивного «корневого» класса со свойством типа страны).

<xs:element name="root">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="Country"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Если вы добавите вышеупомянутый фрагмент схемы в свою схему, вы должны получить ожидаемые результаты.Сначала я думал, что это связано с проблемой, описанной здесь ;в то время как вы все еще можете использовать инструмент для визуализации набора данных, как описано выше по ссылке MSDN, в вашем случае предложенный вами стиль разработки (в основном russian-doll ) не может изменить результат.

...