Имя: Пароль:
1C
 
XDTO ошибка при чтении "Структура объекта не соответствует типу: {ххх}"
0 nicxxx
 
29.06.16
20:50
Гуру xml, подскажите, куда копать?
Если в тэге явно указать тип и пространство имен, например так
<Deal xmlns=""myNameSpace"" xmlns:xs=""http://www.w3.org/2001/XMLSchema""; xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""; xsi:type=""Deal"">",
то фабрика прекрасно читает такой тэг. Однако, когда я читаю тэг вида <Deal>, но указывая явно тип в фабрике, т.е. так:
ТипОбъектаXDTO = ФабрикаXDTO.Тип("myNameSpace", "Deal");
ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение, ТипОбъектаXDTO);
то в итоге получаю ошибку:
"Структура объекта не соответствует типу: {myNameSpace}Deal"
1 Beretta
 
29.06.16
21:21
Копать в понимание пространств и полностью квалифицированных имен.
В первом случае у тебя в файле объект с именем Deal из пространства myNameSpace. Фабрика его знает и читает без подсказок.
Во втором - у тебя в файле объект с именем Deal из пустого пространства имен (вернее из пространства по умолчанию, определенного по вверх по иерархии). А ты пытаешся насильно прочитать обеъкт с типом Deal из пространства myNameSpace.
Я бы тоже на месте фабрики возмутился.
2 nicxxx
 
30.06.16
10:54
да, ход мыслей понятен.
забыл уточнить - реквизиты тэга <Deal> приходят в виде элементов, т.е.
<Deal>
    <dealDate>2016-01-01</dealDate>
    ...

Однако есть еще одна база с похожей задачей, отличие в формате сообщений - там реквизиты приходя в атрибутах тэга, т.е.
<Deal deal_date="2016-01-13T18:15:50"/>
и они так же нетипизированы, как и в первой базе.

Так вот в базе №2 такое чтение (с явным указанием типа) работает.
3 nicxxx
 
30.06.16
11:39
провел еще один эксперимент - переделал сообщение из базы №1 таким образом, чтобы реквизиты объекта были в атрибутах тэга, а не в элементах. типизированное чтение работает. Интересно, есть этому разумное объяснение? (я, к своему сожалению, в xml не эксперт. некогда углубляться в его изучение)
4 Beretta
 
30.06.16
23:49
Есть много интересных вариантов чтения xml (к сожалению, некогда объяснять разумное поведение системы в разных случаях). Если есть проблема, то ее можно решить, если не держать ее в тайне. Если же есть желание проводить эксперименты, то всецело разделяю с тобой радость открытия нового, завидую получению опыта и желаю всяческих успехов в этом нелегком деле =)