|
Как прочитать в XML тег Документ.ТегКоторыйМожетОтсутствовать через ФабрикаХДТО? |
☑ |
0
totparen
29.06.17
✎
15:02
|
Ребята, подскажите как правильно читать значение тега, если он не обязательный?
Например:
ХМЛ = Новый ЧтениеXML();
ХМЛ.ОткрытьФайл(ДанныеПредзаказа.Файл.ПолноеИмя);
ФайлХДТО = ФабрикаXDTO.ПрочитатьXML(ХМЛ);
лЗначение = ФайлХДТО.Документ.ТегКоторыйМожетОтсутсовать; // Здесь возникает исключение.
Создание фабрики на основе XSD схемы не помогает.
|
|
1
totparen
29.06.17
✎
15:04
|
Ищется не способ, как это обойти, а как по фен-шую значение получать.
|
|
2
totparen
29.06.17
✎
15:05
|
Обойти я могу так:
лЗначение = СвойствоХДТО(ФайлХДТО.Документ,"ТегКоторыйМожетОтсутсовать");
Функция СвойствоХДТО(ОбъектХДТО,ИмяСвойства,ЗначениеПоУмолчанию = Неопределено)
КоллекцияСвойств = ОбъектХДТО.Свойства();
СвойствоХДТО = КоллекцияСвойств.Получить(ИмяСвойства);
Если СвойствоХДТО = Неопределено Тогда
Возврат ЗначениеПоУмолчанию;
Иначе
Возврат ОбъектХДТО.Получить(СвойствоХДТО);
КонецЕсли;
КонецФункции
|
|
3
Имитация работы
29.06.17
✎
15:31
|
емнип ПолучитьXDTO(), если там неопределено, то идти в тип этого свойства и брать оттуда ЗначениеПоУмолчанию
|
|
4
Имитация работы
29.06.17
✎
15:32
|
возможно в тип ходить и не придется, надо проверить
|
|
5
Вафель
29.06.17
✎
15:40
|
а чем попытка не по феншую?
|
|
6
totparen
29.06.17
✎
15:46
|
(3) Нифига. Если свойства нет, то исключение.
|
|
7
totparen
29.06.17
✎
15:47
|
(5) Если у меня в ХМЛ будет 20 не обязательных реквизитов, то, нутром чую, что 20 попыток лепить - это через чур.
|
|
8
тарам пам пам
29.06.17
✎
16:01
|
В (2) у тебя все "по фэншую", разве что можно сразу написать
СвойствоХДТО = ОбъектХДТО.Получить(ИмяСвойства);
а не через коллекцию свойств
|
|
9
тарам пам пам
29.06.17
✎
16:06
|
+(8) вот так:
Функция СвойствоХДТО(ОбъектХДТО,ИмяСвойства,ЗначениеПоУмолчанию = Неопределено)
ЗначениеСвойства = ОбъектХДТО.Получить(ИмяСвойства);
Если ЗначениеСвойства = Неопределено Тогда
Возврат ЗначениеПоУмолчанию;
Иначе
Возврат ЗначениеСвойства;
КонецЕсли;
КонецФункции
|
|
10
totparen
29.06.17
✎
16:15
|
(9)
Враки.
ОбъектХДТО.Получить("ТраЛяЛя) - будет исключение.
|
|
11
тарам пам пам
29.06.17
✎
16:18
|
(10) если в схеме свойство описано (пусть даже как не обязательное) - то не будет
|
|
12
totparen
29.06.17
✎
16:21
|
(11) Допустим. Не проверял ещё.
Тогда придется всегда всегда значения из ХМЛ дёргать через "СвойствоХДТО" ?
|
|
13
тарам пам пам
29.06.17
✎
16:23
|
(12) да. Ну или можно напрямую, если поле обязательное.
|
|
14
totparen
29.06.17
✎
16:24
|
Может как-то можно сгенерировать структуру на основе ХМЛ, и дополнить её недостающими ключами на основе ХСД? (Хотя мне кажется где-то тут собачка зарыта...)
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший