При интеграции 1С с внешними веб-сервисами и выполнении HTTP-запросов ответ часто приходит в формате XML непосредственно в виде строковой переменной. Создание временных файлов на диске для последующего чтения документа приводит к лишней нагрузке на файловую систему и замедляет работу программы. Проанализируем, как правильно разобрать XML-данные из строки в памяти, не сохраняя их на диск.
Для чтения XML из текстовой переменной платформа 1С:Предприятие предоставляет специализированный метод УстановитьСтроку объекта ЧтениеXML. Рассмотрим, как инициализировать чтение без вызова метода ОткрытьФайл.
Разберем базовый пример кода:
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрXML);
Пока ЧтениеXML.Прочитать() Цикл
// Обработка узлов XML
КонецЦикла;
ЧтениеXML.Закрыть();
Метод УстановитьСтроку имеет следующие параметры:
ПараметрыЧтенияXML, позволяющий задать правила обработки пробельных символов и комментариев.НаборСхемXML для валидации структуры документа.При обработке строк XML, полученных по HTTP, можно столкнуться с несколькими специфическими проблемами:
<?xml version="1.0" encoding="UTF-8"?>), метод УстановитьСтроку может вызвать ошибку несоответствия. Для предотвращения ошибки рекомендуется вырезать заголовок <?xml ...?> перед вызовом чтения.ЧтениеXML следует очищать ее от непечатаемых символов.Рассмотрим другие удобные инструменты платформы, позволяющие обрабатывать XML из памяти в зависимости от стоящей задачи:
1. Использование объекта ПостроительDOM
Если требуется выгрузить документ в дерево узлов для произвольной навигации или поиска элементов с помощью XPath, скомбинируем ЧтениеXML и ПостроительDOM:
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТекстXML);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
2. Чтение через Фабрику XDTO
Для автоматической конвертации XML-структуры в объектную модель 1С передадим подготовленный объект ЧтениеXML в фабрику XDTO:
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТекстXML);
ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
3. Использование двоичных данных и потоков
Чтобы избежать искажений кодировки при получении ответа через HTTPОтвет, проанализируем получение данных через двоичный поток. В современных версиях платформы можно прочитать данные прямо из потока памяти, используя ПотокВПамяти и метод ОткрытьПоток объекта ЧтениеXML, что исключает ошибки со строковыми заголовками кодировок.