Как загрузить двоичные данные в ЧтениеXML в 1С без сохранения файла на диск?

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

При работе с внешними источниками данных, например при получении электронных писем с вложениями или вызове web-сервисов, XML-документы часто поступают в виде объекта ДвоичныеДанные. Классический подход с сохранением вложений во временный файл на диске с последующим вызовом метода ОткрытьФайл() замедляет работу системы и создает лишнюю нагрузку на дисковую подсистему сервера.

Рассмотрим, как прочитать XML-структуру напрямую из оперативной памяти без создания промежуточных файлов на диске.

Способ 1. Использование потока данных (ОткрытьПоток)

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

Разберем по шагам реализацию данного подхода:

  1. Получаем объект ДвоичныеДанные (например, из вложения входящего письма).
  2. Открываем поток для чтения с помощью метода ОткрытьПотокДляЧтения().
  3. Передаем полученный поток в метод ОткрытьПоток() объекта ЧтениеXML.
  4. Выполняем чтение и обработку узлов XML.
  5. Обязательно закрываем объект чтения и поток для освобождения ресурсов сервера.

Посмотрим на пример кода:


// Предположим, ДвоичныеДанныеXML содержат наш XML-документ
ПотокЧтения = ДвоичныеДанныеXML.ОткрытьПотокДляЧтения();

ПарсерXML = Новый ЧтениеXML;
ПарсерXML.ОткрытьПоток(ПотокЧтения);

Пока ПарсерXML.Прочитать() Цикл
    // Обработка узлов XML-документа
КонецЦикла;

ПарсерXML.Закрыть();
ПотокЧтения.Закрыть();

Преимущество метода: Данный способ выполняет порционное чтение данных, что экономит оперативную память при работе с большими файлами. Кроме того, ЧтениеXML автоматически определяет кодировку документа и сигнатуру BOM из заголовка XML.

Способ 2. Преобразование двоичных данных в строку

Если файл имеет небольшой размер, можно конвертировать двоичные данные в текстовую строку и загрузить её в парсер с помощью метода УстановитьСтроку().

Проанализируем пример выполнения этой операции:


// Преобразуем двоичные данные в текстовую строку
ТекстоваяСтрокаXML = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанныеXML, КодировкаТекста.UTF8);

ПарсерXML = Новый ЧтениеXML;
ПарсерXML.УстановитьСтроку(ТекстоваяСтрокаXML);

Пока ПарсерXML.Прочитать() Цикл
    // Обработка узлов XML-документа
КонецЦикла;

ПарсерXML.Закрыть();

Особенности метода: Метод УстановитьСтроку() принимает только раскодированную текстовую строку, а не строку в формате Base64. При использовании функции ПолучитьСтрокуИзДвоичныхДанных() важно точно указывать исходную кодировку файла (например, UTF-8 или Windows-1251), иначе кириллические символы могут прочитаться некорректно.

Важно учитывать, что при загрузке больших XML-документов через УстановитьСтроку() весь текст помещается в оперативную память целиком, что может привести к повышенному расходу ресурсов сервера. Для больших файлов рекомендуется всегда использовать загрузку через поток ОткрытьПоток().

← На главную