powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как десериализовать XSD с вложениями?
3 сообщений из 3, страница 1 из 1
Как десериализовать XSD с вложениями?
    #35465085
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Помогите, плиз, разобраться с проблемой:

Есть XSD из которого нужно создать DataSet
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<xs:schema id="DataSet" xmlns:cn="my-schema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
 
              <xs:element name="FROM" sql:relation="FROM" >
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="KOD" type="cn:kod" sql:datatype="varchar(5)"  />
                  </xs:sequence>
                </xs:complexType>
              </xs:element>

      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>
</DataSet>


Все бы ничего, но type="cn:kod" описан в другом файле:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" ?>
<xs:schema targetNamespace="my-schema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="my-schema">
	<xs:simpleType name="kod">
		<xs:restriction base="xs:string">
			<xs:length value="5" />
		</xs:restriction>
	</xs:simpleType>
</xs:schema>

Почему-то сериализатор не подтягивает файл с описанием типов, хотя я явно указываю его в настройках XMLReader-а.
Вот фрагмент кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
            XmlReaderSettings settings = new XmlReaderSettings();
           
            settings.ProhibitDtd = false;
            settings.Schemas.Add("http://www.w3.org/2001/XMLSchema", XmlReader.Create("xsdschema.xsd", settings));
            settings.Schemas.Add("urn:schemas-microsoft-com:xml-msdata", XmlReader.Create("msdata.xsd", settings));
            settings.Schemas.Add("my-schema", XmlReader.Create("common.xsd", settings));

            
            settings.ValidationType = ValidationType.Schema;
            settings.ConformanceLevel = ConformanceLevel.Document;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
            settings.ValidationEventHandler += ValidationCallBack;

            var serializer = new XmlSerializer(typeof (DataSet));
            var set = (DataSet)serializer.Deserialize(reader);

Хотя, если эта же связка XSD-шников нормально грузится в XMLDocument.
...
Рейтинг: 0 / 0
Как десериализовать XSD с вложениями?
    #35465876
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ни крутил, ни чего не вышло. Пришлось "подключать" библиотеку типов с помощью <xs:import>, что доставляет некоторые неудобства:

Код: plaintext
1.
2.
3.
4.
<?xml version="1.0" encoding="utf-8"?>
<DataSet>
<xs:schema id="DataSet" xmlns:cn="my-schema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:import namespace="my-schema" schemaLocation="common.xsd"/>


Теперь другая беда. При сериализации вываливаются ошибки:
автор
Warning(2, 2): Не удалось найти информацию о схеме для элемента 'DataSet'.
Error(28, 3): Информационная единица для элемента или атрибута уже проверена из пространства имен ''. Считается ошибкой, если для этого пространства имен встречается 'xsi:schemaLocation', 'xsi:noNamespaceSchemaLocation' или линейная схема.
Error(3, 3): Элемент simpleType 'my-schema:kod' уже объявлен.

Тем не менее, сериализация производится успешно.
...
Рейтинг: 0 / 0
Как десериализовать XSD с вложениями?
    #35465937
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во дела!
Любопытная причина ошибки авторError(3, 3): Элемент simpleType 'my-schema:kod' уже объявлен.

Код: plaintext
settings.Schemas.Add("my-schema", XmlReader.Create("common.xsd", settings));
Код: plaintext
<xs:import namespace="my-schema" schemaLocation="common.xsd"/>
Эти два способа подключения библиотеки, похоже, конфликтуют между собой.
Странно как-то. Я уже решил, что первый способ вообще ни как не участвует в десериализации.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как десериализовать XSD с вложениями?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]