Имя: Пароль:
1C
1С v8
ФабрикаXDTO.Прочитать() и тип свойств "открытых" объектов
0 Fragster
 
гуру
03.06.16
17:23
есть набор схем XML, есть XML.
В есть "открытый" тип, у которого могут быть произвольные свойства.
Как сделать так, чтобы при чтении свойства такого объекта правильно типизировались?
внутри XML что-то типа того:
<Container xmlns="namespace">
            <Element xmlns="namespace">...

При этом в пакетах XDTO есть корневое свойство Element с указанным типом
1 CityZen
 
03.06.16
22:22
Типизировать объекты и их свойства можно только используя схему.
Загружайте схему и указывайте ее перед чтением.
2 Fragster
 
гуру
03.06.16
23:23
(1) спасибо, капитан.
3 Fragster
 
гуру
03.06.16
23:24
а теперь - есть схема. в ней есть открытый тип. его свойства идут как any type, как сделать, чтобы они были типизированы
4 Fragster
 
гуру
06.06.16
10:48
понедельничный ап
5 DmitrO
 
06.06.16
11:36
Для таких свойств, в данных XML документа должен быть указан атрибут xsi:type (xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";) со значением типа.
6 Fragster
 
гуру
06.06.16
11:38
(5) к сожалению, на источник XML повлиять не могу, очень сильно внешняя программа.
7 Fragster
 
гуру
06.06.16
11:40
можно наговнокодить, конечно. залить все в DOM, через XPATH получить все элементы корневых свойств, добавить им атрибут, записать в XML и прочитать в объект XDTO, но это попахивает извращением.
8 DmitrO
 
06.06.16
11:44
(7)ну почему извращением..
наверно другой способ, это читать XML с явным указанием типа, раз ты их знаешь
9 DmitrO
 
06.06.16
11:44
читать элемент из файла имею в виду
10 DmitrO
 
06.06.16
11:48
А вообще, конечно, правила хорошего тона это для элементов типа AnyType всегда указывать xsi:type. И 1С кстати этому правилу следует в своих сериализациях.
11 DmitrO
 
06.06.16
11:56
(10)+ ибо anyType в XML без xsi:type, это как void* в C++, или как object в C# - форменное безобразие!
:)
12 Fragster
 
гуру
06.06.16
13:04
(11) скажите это нашим госорганам
13 Fragster
 
гуру
06.06.16
13:05
дело все в том, что по имени элемента можно его найти в списке корневых свойств и оттуда определить тип. может быть есть кунгфу встроенное в платформу уже.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший