При программной работе с XML в 1С:Предприятии часто возникает ситуация, когда сформированный файл сохраняется «в одну строку». Это затрудняет визуальную проверку данных и работу с системами контроля версий. Давайте разберем, как управлять процессом форматирования при сохранении ДокументDOM в файл.
Основным инструментом для управления выводом является объект ПараметрыЗаписиXML. Именно его конструктор определяет, будет ли 1С автоматически расставлять отступы и переносы строк (так называемый «pretty-print»).
Для создания форматированного XML-файла, в котором каждый элемент находится на новой строке, необходимо обратить внимание на параметры конструктора ПараметрыЗаписиXML. Рассмотрим синтаксис этого конструктора:
ПараметрыЗаписиXML(Кодировка, ПорядокСимволов, ИспользоватьОтступы, СимволыПереносаСтрок)
Ключевым для нашей задачи является третий параметр — ИспользоватьОтступы. Если вы установите его в значение Истина, платформа 1С добавит структурные отступы и переносы строк, делая файл читаемым для человека.
Посмотрим на пример кода, который позволит нам добиться желаемого результата. В данном сценарии мы создаем ДокументDOM, инициализируем ПараметрыЗаписиXML с включенными отступами и записываем содержимое в файл:
// Создаем параметры записи с включенными отступами
// Третий параметр (Истина) отвечает за форматирование
ПараметрыЗаписи = Новый ПараметрыЗаписиXML("UTF-8", , Истина, Истина);
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписи);
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
ЗаписьXML.Закрыть();
Если вы ранее использовали значение Ложь в третьем параметре, просто замените его на Истина, и структура XML-файла автоматически примет «красивый» вид с древовидной структурой элементов.
Иногда возникает необходимость отформатировать данные не в файле напрямую, а в строковой переменной, например, для вывода на экран или передачи в текстовое поле формы. В этом случае удобно использовать УстановитьСтроку:
// Форматирование внутри строковой переменной
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку(Новый ПараметрыЗаписиXML(, , Истина, Истина));
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
// Получаем отформатированную строку
ОтформатированныйТекстXML = ЗаписьXML.Закрыть();
Рассмотрим, зачем нам вообще нужно такое форматирование:
XML-сообщения, визуальное разделение тегов на строки значительно сокращает время поиска ошибок.Git для хранения конфигураций или файлов интеграции, «длинная строка» приведет к тому, что любое изменение в файле будет отображаться как изменение всего файла целиком. Форматированный XML позволяет корректно отслеживать историю изменений (diff).Разберем еще несколько нюансов, которые помогут вам избежать проблем при работе с XML:
СтрЗаменить могут повредить структуру документа, если в данных внутри узлов содержатся специфические символы (например, «>» или «<»). Всегда используйте штатные методы платформы ЗаписьDOM.XML-данных через API, используйте «сжатый» (неформатированный) формат для оптимизации передачи.XML-файл уже сформирован не вами и его нужно быстро прочитать, используйте сторонние инструменты, например Notepad++ с плагином XML Tools, который позволяет мгновенно форматировать текст нажатием комбинации клавиш.Таким образом, для получения чистого и структурированного XML-документа достаточно грамотно настроить ПараметрыЗаписиXML, указав платформе необходимость использования отступов при записи объекта.