Механизм XDTO (XML Data Transfer Objects) собственная разработка 1С, который появился с выходом платформы 8.1. Это очень мощный инструмент, а удобный разбор XML лишь малая часть того, что он может. В рамках этой статьи останавливаться подробно на самом механизме не буду.
Кроме использования XDTO существует множество способов парсинга XML файлов в 1С — от простого последовательного перебора текста, до использования внешних dll библиотек. Вот некоторые преимущества при использования для этой задачи именно этого механизм:
- Быстродействие — конвертация файла в ОбъектXDTO проходит сравнительно быстро. Стоит отметить, что время выполнения зависит от объема данных линейно.
- Удобно программировать — тремя строчками кода, мы получаем готовый ОбъектXDTO из любого xml, с которым очень удобно работать используя синтаксис 1С «через точку».
- В случае наличия xsd-схемы можно на ходу проверять соответствие файла схеме.
Ниже примеры кода.
Для получения ОбъектXDTO достаточно вызвать метод ПрочитатьXML глобальной ФабрикиXDTO
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл(ФайлXML, ,);
ОбъектXDTOизФайла = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Далее работаем с атрибутами, свойствами и текстом XML.
Свойства и атрибуты можно прочитать методом Свойства() ОбъектаXDTO:
//атрибуты и свойства
Для Каждого Св Из ОбъектXDTO.Свойства() Цикл
Если Св.Форма = ФормаXML.Атрибут Тогда
Ключ=Св.Имя;
Значение = ОбъектXDTO.Получить(Св);
КонецЕсли;
КонецЦикла;
Текст и свойства XML получаем через Последовательность():
Последовательность = ОбъектXDTO.Последовательность();
КолвоЭлементов = Последовательность.Количество();
Если КолвоЭлементов = 0 Тогда
//у объекта только атрибуты
Возврат;
КонецЕсли;
Для Индекс=0 По КолвоЭлементов—1 Цикл
Свойство = Последовательность.ПолучитьСвойство(Индекс);
Если Свойство = Неопределено Тогда
//это текст
Значение = Последовательность.ПолучитьТекст(Индекс);
Иначе
Значение = Последовательность.ПолучитьЗначение(Индекс);
КонецЕсли;
КонецЦикла;
Обработка с примером конвертации данных из XML в дерево значений в приложении: