При разработке интеграционных решений на платформе 1С часто возникает задача передачи данных во внешние системы в формате XML. Если исходные данные представлены в виде Структура, возникает вопрос: как эффективно и правильно превратить эту коллекцию ключей и значений в валидный XML-файл или строку? В этой статье мы разберем основные подходы к решению этой задачи.
Ручной способ записи — это наиболее надежный вариант, если принимающая сторона требует строгого соответствия структуры XML (например, определенный порядок тегов или отсутствие лишних пространств имен). Этот метод позволяет нам полностью контролировать каждый узел документа.
Рассмотрим, как это реализовать по шагам:
ЗаписьXML.Структура.Для автоматизации записи большого количества полей используйте цикл Для Каждого, который перебирает структуру и записывает каждый элемент как отдельный тег:
// Пример формирования XML через цикл
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("response");
Для Каждого ТекЭлемент Из ВашаСтруктура Цикл
Запись.ЗаписатьНачалоЭлемента(ТекЭлемент.Ключ);
Запись.ЗаписатьТекст(Строка(ТекЭлемент.Значение));
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Результат = Запись.Закрыть();
Этот подход гарантирует, что даже при наличии сложных имен ключей мы получим валидный XML, а все специальные символы (например, & или <) будут автоматически экранированы встроенными средствами платформы.
Если ваша задача подразумевает работу с уже описанными схемами или вы хотите максимально сократить объем кода, можно воспользоваться возможностями СериализаторXDTO. Это мощный инструмент, который позволяет превратить объект 1С (включая структуры) в XML практически в одну строку кода.
// Использование сериализатора
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(Запись, ВашаСтруктура);
Результат = Запись.Закрыть();
Важное замечание: при использовании СериализаторXDTO следует помнить, что платформа может добавлять дополнительные атрибуты xsi:type или пространства имен, которые могут быть не понятны стороннему сервису. Используйте этот метод только в том случае, если принимающая система поддерживает стандартную сериализацию 1С или если вы заранее подготовили XDTO-пакет.
Работая с XML, важно учитывать несколько технических нюансов:
UTF-8).XML путем простого сложения строк (конкатенации). Это приведет к ошибкам, если в данных окажутся спецсимволы вроде кавычек или знаков сравнения. Всегда используйте ЗаписьXML.Структура станет именем тега. Убедитесь, что ключи не содержат недопустимых символов (например, пробелов), иначе XML-парсер выдаст ошибку при чтении.<tag></tag> или их стоит полностью исключить из XML? При ручной записи вы можете добавить условие Если ЗначениеЗаполнено(ТекЭлемент.Значение) Тогда.Выбор метода зависит от ваших задач. Если XML-структура должна быть максимально простой и «чистой», используйте первый метод с циклом. Если же вы строите сложную систему обмена данными с использованием схем, XDTO станет вашим лучшим помощником. Для освоения базовых механизмов технологии подойдёт руководство по основам работы с XDTO.