Как разобрать однострочную XML-строку в читаемый вид в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе интеграции с внешними API через HTTP-запросы разработчики часто сталкиваются с ситуацией, когда сервер возвращает XML-данные в виде «сырой» длинной строки без отступов и переносов. Работать с таким текстом в отладке или просматривать его в регистрах сведений крайне неудобно. В этой статье мы подробно разберем, как программно в 1С и с помощью внешних инструментов превратить «нечитаемое полотно» в структурированное дерево тегов.

Программный метод в 1С с использованием объектной модели DOM

Наиболее корректным и надежным способом внутри платформы 1С является использование объектной модели документа (DOM). Этот метод позволяет не просто расставить переносы строк, а полностью пересобрать XML-структуру с учетом правил вложенности. Рассмотрим этот процесс пошагово.

Для реализации нам понадобятся объекты ЧтениеXML, ПостроительDOM и ЗаписьXML. Основная хитрость заключается в использовании объекта ПараметрыЗаписиXML, который отвечает за визуальное представление результата.

Проанализируем следующий алгоритм:


// Предположим, что в переменной ОтветСервера находится наша длинная строка XML
ЧтениеXML = Новый ЧтениеXML;
Попытка
    // Инициализируем чтение из строки
    ЧтениеXML.УстановитьСтроку(ОтветСервера);
    
    // Создаем построитель и читаем XML в дерево DOM
    ПостроительDOM = Новый ПостроительDOM;
    ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
    
    // Подготавливаем запись в новую строку
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    
    // Настраиваем параметры записи: 
    // Третий параметр "Истина" включает автоматические отступы (Indent)
    ПараметрыЗаписи = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина, Ложь, Chars.LF);
    
    // Записываем документ обратно, применяя форматирование
    ЗаписьDOM = Новый ЗаписьDOM;
    ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML, ПараметрыЗаписи);
    
    // Получаем результат
    КрасивыйXML = ЗаписьXML.Закрыть();
    Сообщить(КрасивыйXML);
Исключение
    // Если строка не является валидным XML, обрабатываем ошибку
    Сообщить("Ошибка разбора XML: " + ОписаниеОшибки());
КонецПопытки;

Разберем важные нюансы этого кода. Объект ПараметрыЗаписиXML позволяет гибко настроить вывод. Мы указали Истина в третьем параметре, что заставляет систему добавлять символы табуляции или пробелы перед вложенными тегами. Также мы явно задали перевод строки Chars.LF, что обеспечит корректное отображение в большинстве текстовых редакторов и полей 1С.

Использование XSL-преобразования (XSLT)

Если вам требуется максимальная производительность или специфическое форматирование (например, нужно отсортировать атрибуты), стоит обратить внимание на объект ПреобразованиеXSL. Это мощный инструмент, который может трансформировать XML-данные по заданному шаблону.

Для простого «красивого» вывода мы можем использовать пустой шаблон преобразования с инструкцией indent="yes". Этот метод часто работает быстрее на очень больших файлах, так как оптимизирован на уровне системных библиотек.

Выясним, как это выглядит в коде:


ШаблонXSL = 
"<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
|	<xsl:output method=""xml"" indent=""yes"" encoding=""UTF-8""/>
|	<xsl:template match=""@* | node()"">
|		<xsl:copy>
|			<xsl:apply-templates select=""@* | node()""/>
|		</xsl:copy>
|	</xsl:template>
|</xsl:stylesheet>";

Преобразование = Новый ПреобразованиеXSL;
Преобразование.ЗагрузитьИзСтроки(ШаблонXSL);

Результат = Преобразование.ПреобразоватьИзСтроки(ОтветСервера);

Здесь мы создаем минимальный XSL-скрипт, который просто копирует все узлы и атрибуты как есть, но за счет инструкции xsl:output indent="yes" заставляет процессор расставлять переносы и отступы автоматически.

Форматирование с помощью внешних редакторов

Иногда программная обработка не требуется, и нам нужно «просто один раз посмотреть» на содержимое XML в удобном виде. В таких случаях помогут специализированные редакторы.

  1. Notepad++ с плагином XML Tools. Это «золотой стандарт» для разработчиков. Установите плагин через Plugins Admin, затем вставьте вашу однострочную XML в редактор и нажмите комбинацию клавиш Ctrl + Shift + Alt + B (или выберите в меню Plugins -> XML Tools -> Pretty Print). Программа мгновенно превратит строку в иерархическое дерево.
  2. Visual Studio Code. Если вы предпочитаете VS Code, установите расширение "XML" (от Red Hat). После этого достаточно нажать Shift + Alt + F для автоматического форматирования текущего документа.
  3. Браузеры. Самый быстрый способ без установки стороннего ПО — сохранить строку в файл с расширением .xml и открыть его в любом современном браузере (Chrome, Edge, Firefox). Браузеры имеют встроенные визуализаторы XML с возможностью сворачивания и разворачивания узлов.

Опасности использования регулярных выражений

Посмотрим на популярный, но рискованный метод — использование простой замены символов. Некоторые разработчики предлагают заменять символ закрытия тега > на > плюс символ переноса строки.

Важно: Мы крайне не рекомендуем использовать этот подход для серьезных задач. Рассмотрим причины:

Инструменты внутри типовых конфигураций (БСП)

Если ваша база построена на Библиотеке Стандартных Подсистем (БСП), проанализируйте возможности встроенных инструментов. В составе многих конфигураций есть обработка «Консоль запросов» или «Редактор объектов». При просмотре длинных текстовых полей (например, в журнале регистрации или в очередях сообщений) в них часто встроена кнопка «Форматировать XML» или «Просмотр в виде XML», которая использует описанные выше механизмы DOM внутри себя.

Также стоит помнить, что в платформе 1С 8.3 при выводе текстовой переменной в поле текстового документа, если установить свойство Расширение в значение XML, среда может подсветить синтаксис, что упростит чтение даже без глубокого форматирования.

Таким образом, мы рассмотрели несколько способов решения задачи. Для автоматизации внутри системы лучше всего подходит ПостроительDOM с правильными ПараметрамиЗаписиXML, а для быстрого анализа данных в процессе разработки — плагины к текстовым редакторам.

← На главную