Позволяет произвести чтение значения атрибута узла/объекта xdto по имени, с помощью Фабрики XDTO. В конце пример использования. При чтении XML фабрикой XDTO во всех названиях узлов и свойств имеющих знак тире "-", платформа автоматически меняет тире на нижнее подчеркивание. Этот нюанс учтен в функции.
Функция ЗначениеСвойстваXDTO(ОбъектXDTO, Имя)
ВариантИмени = СтрЗаменить(Имя, "-", "_");
Значение = Неопределено;
ИмяПоиска = Неопределено;
Если ТипЗнч(ОбъектXDTO) = Тип("ОбъектXDTO") Тогда
Свойства = ОбъектXDTO.Свойства();
Для Каждого Свойство Из Свойства Цикл
Если Врег(Свойство.Имя) = Врег(Имя) Тогда
ИмяПоиска = Имя;
Прервать;
ИначеЕсли Врег(Свойство.Имя) = Врег(ВариантИмени) Тогда
ИмяПоиска = ВариантИмени;
Прервать;
КонецЕсли;
КонецЦикла;
Если ИмяПоиска <> Неопределено Тогда
Если ТипЗнч(ОбъектXDTO[ИмяПоиска]) = Тип("СписокXDTO") Тогда
Значение = ОбъектXDTO.ПолучитьСписок(ИмяПоиска);
Иначе
Значение = ОбъектXDTO.ПолучитьXDTO(ИмяПоиска);
КонецЕсли;
Если ТипЗнч(Значение) = Тип("ЗначениеXDTO") Тогда
Значение = Значение.Значение;
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(ОбъектXDTO) = Тип("ЗначениеXDTO") Тогда
Значение = ОбъектXDTO.Значение;
КонецЕсли;
Возврат Значение;
КонецФункции
// ИСПОЛЬЗОВАНИЕ
//
// На входе имеем XML. И нам нужно получить значение атрибута "message"
СтрокаXML = "
| <response>
| <payment message='Техническая ошибка'>
| <from>
| <amount>0.00</amount>
| </from>
| </payment>
| </response>";
// Полный процесс получения будет выглядеть так
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Данные = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
ЧтениеXML.Закрыть();
Платеж = ЗначениеСвойстваXDTO(Данные, "payment");
Если Платеж <> Неопределено Тогда
Ошибка = ЗначениеСвойстваXDTO(Платеж, "message"); // Ошибка = "Техническая ошибка"
Сообщить(Ошибка);
КонецЕсли;
ПриЧтенииПредставленийНаСервере (БСП)
ЕстьПравоЧтенияИнформацииОВерсияхОбъектов (БСП)
ЕстьПравоЧтенияДанныхВерсийОбъектов (БСП)
#1, 04 февраля 2021 05:32
Отличная функция, применил в разработке. Спасибо. Единственно, надо изменить строки, приведя их к верхнему регистру. Я столкнулся с этим.