|
Фабрика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=";) со значением типа.
|
|
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
|
дело все в том, что по имени элемента можно его найти в списке корневых свойств и оттуда определить тип. может быть есть кунгфу встроенное в платформу уже.
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший