powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Очень хочу десериализовать XML, проблема с неймсейсами
6 сообщений из 6, страница 1 из 1
Очень хочу десериализовать XML, проблема с неймсейсами
    #35820763
mman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть XML следующей структуры (упрощенно):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<obj xmlns="urn:namespace" versionId="4.0" xsi:type="ClassName">
<name xmlns="urn:namespace">Name</name>
<annotation xmlns="urn:namespace">Descr</annotation>
<enabled xmlns="urn:namespace">true</enabled>
<value xsi:type="SubClassName">
...
</value>
<key>names</key>
<value xsi:type="ArrayOfString">
<string xsi:type="xsd:string">name0</string>
<string xsi:type="xsd:string">name1</string>
</value>

</obj>

При попытке его десериализации (.NET 2.0),
Код: plaintext
1.
XmlSerializer xs = new XmlSerializer(typeof(ClassName));

Вылетает exception "<obj ... not expected"

Меняю рутовый таг на ClassName, вылетает exception "'xsi' namespace not found"
пытаюсь добавить xsi и xsd неймспейсы, как указано здесь
http://msdnrss.thecoderblogs.com/2009/02/12/undeclared-namespace-in-xml-eg-xsi-is-an-undeclared-namespace/

Когда десериализую вылетает <ClassName xmlns='urn:namespace'> was not expected.

Создаю такой обьект и сериализую, получается следующее и нормально десериализуется:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0"?>
<ClassName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <name xmlns="urn:namespace">Name</name>
  <annotation xmlns="urn:namespace">Descr</annotation>
  <enabled xmlns="urn:namespace">true</enabled>
  <SubClassName xmlns="urn:namespace">
<value>
...
</value>
</SubClassName>
<key>names</key>
<value>
<string>name0</string>
<string>name1</string>
</value>
</ClassName>

И это нормально десериализуется.

Первичный формат поменять никак не могу, задача типа реверс-инжинирига. Очевидно, что как-то нода заменять неймспейсы на всех внутренних тэгах обекта и добавить xsd и xsi. Есть идеи?
...
Рейтинг: 0 / 0
Очень хочу десериализовать XML, проблема с неймсейсами
    #35821268
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mman,

Предположу, что Вы не подсовываете сериализатору схему при вызове метода Deserialize.
...
Рейтинг: 0 / 0
Очень хочу десериализовать XML, проблема с неймсейсами
    #35821313
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В примере, на котрый Вы ссылаетесь, есть строчка:
Код: plaintext
XmlReaderSettings xset = new XmlReaderSettings();

Вам нужно дополнить сеттинги XML-ридера реальными схемами. Что-то вроде этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
                var settings = new XmlReaderSettings();

                settings.Schemas.Add("http://www.w3.org/2001/XMLSchema", XmlReader.Create("xsdschema.xsd", settings));

                settings.Schemas.Add("urn:mynamespace1", XmlReader.Create("myschema1.xsd", settings));

                settings.Schemas.Add("urn:mynamespace2", XmlReader.Create( "myschema2.xsd", settings));


                settings.ValidationType = ValidationType.Schema;

                settings.ConformanceLevel = ConformanceLevel.Document;

                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;

                settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;

                settings.ValidationEventHandler += ValidationCallBack;

                return settings;
...
Рейтинг: 0 / 0
Очень хочу десериализовать XML, проблема с неймсейсами
    #35825107
mman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Minatavr,

Что-то непонятно откуда я возьму эти схемы. Спасибо за совет конечно. Но вопрос остается открытым.
...
Рейтинг: 0 / 0
Очень хочу десериализовать XML, проблема с неймсейсами
    #35829693
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mmanMinatavr,

Что-то непонятно откуда я возьму эти схемы.
Если вы про нижеуказанные схемы?
Код: plaintext
<ClassName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Их найти можно в папке вижуал-студии. Например, вторая из них описана в файле xsdschema.xsd.
...
Рейтинг: 0 / 0
Очень хочу десериализовать XML, проблема с неймсейсами
    #35829706
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выложите, пожалуйста, более полную версию исходного XML.
Что-то мне не нравится использование "xsi:type=..." без описания, что же такое "xsi".
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Очень хочу десериализовать XML, проблема с неймсейсами
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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