ЗаписьXML.ОткрытьПоток

Методы · OpenStream

Открывает поток для записи документов и фрагментов XML. Позволяет указать тип кодировки, который будет использован для записи.

Синтаксис

ОткрытьПоток(<Поток>, <ТипКодировки>, <ДобавлятьBOM>)
ОткрытьПоток(<Поток>, <ПараметрыЗаписи>, <ДобавлятьBOM>)
Полное описание, параметры и ограничения

ЗаписьXML.ОткрытьПоток (XMLWriter.OpenStream)

ЗаписьXML (XMLWriter)

ОткрытьПоток (OpenStream)

Доступен, начиная с версии 8.3.10.

Вариант синтаксиса: По потоку и типу кодировки

Синтаксис:
ОткрытьПоток(<Поток>, <ТипКодировки>, <ДобавлятьBOM>)
Параметры:

<Поток> (обязательный)
Тип: Поток, ПотокВПамяти, ФайловыйПоток.
Поток, в который будет записан текст XML.

<ТипКодировки> (необязательный)
Тип: Строка.
В качестве типа кодировки может быть указана одна из возможных кодировок текста. В этом случае поток будет записан в соответствующей кодировке. При этом в объявлении XML-документа (если таковое будет записано) будет присутствовать атрибут 'encoding', имеющий соответствующее значение. Если же в качестве параметра указана пустая строка или ничего не указано, то для записи потока будет использована кодировка UTF8, а атрибут 'encoding' не будет присутствовать в объявлении XML-документа.
Поддерживаемые коды кодировок:
UTF-8

UTF-16

UTF-16BE

UTF-16LE

ISO-8859-1

US-ASCII

gb18030

iso-8859-2

iso-8859-3

iso-8859-4

iso-8859-5

iso-8859-6

iso-8859-7

iso-8859-8

iso-8859-9

iso-8859-13

iso-8859-15

Shift_JIS

EUC-JP

Big5

Big5-HKSCS

GBK

GB2312

GB_2312-80

EUC-KR

KSC_5601

windows-949

windows-874

cp866

KOI8-R

KOI8-U

windows-1250

windows-1251

windows-1252

windows-1253

windows-1254

windows-1255

windows-1256

windows-1257

windows-1258

macintosh

x-mac-cyrillic

ISO-2022-JP

ISO-2022-KR

ISO-2022-CN

ISO-2022-CN-EXT

HZ-GB-2312
.

<ДобавлятьBOM> (необязательный)
Тип: Булево.
Определяет, будет ли добавлена метка порядка байт (BOM) к результирующему потоку XML.
Значение по умолчанию: Истина.
Описание варианта метода:
Позволяет указать тип кодировки, который будет использован для записи потока XML.
Вариант синтаксиса: С параметрами записи

Синтаксис:
ОткрытьПоток(<Поток>, <ПараметрыЗаписи>, <ДобавлятьBOM>)
Параметры:

<Поток> (обязательный)
Тип: Поток, ПотокВПамяти, ФайловыйПоток.
Поток, в который будет записан текст XML.

<ПараметрыЗаписи> (необязательный)
Тип: ПараметрыЗаписиXML.
Параметры записи XML.

<ДобавлятьBOM> (необязательный)
Тип: Булево.
Определяет, будет ли добавлена метка порядка байт (BOM) к результирующему потоку XML.
Значение по умолчанию: Истина.
Описание варианта метода:
Позволяет указать параметры записи XML.
Описание:

Открывает поток для записи документов и фрагментов XML. Позволяет указать тип кодировки, который будет использован для записи.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.10.

Методическая информация

Практические примеры

Создать настоящие UTF-8 байты XML в памяти

ОткрытьПоток получает параметры и явный Ложь для BOM. Затем тот же собственный поток используется для обратного чтения.

Где и как запускать

Полный серверный общий модуль собственной учебной базы; не тонкий клиент.

Подготовка

  1. В своей учебной базе 8.5.1.1343 создайте серверный общий модуль УчебнаяЗаписьXML. Вставьте полный модуль одного урока и вызовите УчебнаяЗаписьXML.ВыполнитьПример() из собственной серверной команды.

  2. Все тексты и товары заданы константами: Книга, A&B, количество 3. Учётные данные, файлы организации, HTTP и внешние XML не используются.

  3. Первые шесть уроков работают только со строками/потоком в памяти. Последний создаёт один новый временный XML в собственной учебной базе; имя выводится, файл оставляется для ручной проверки.

  4. Для урока файла имя конфигурации должно быть УчебнаяКонфигурацияСинтаксиса. Существующий файл не перезаписывается. После проверки удалите вручную только показанный собственный временный файл.

  5. ПараметрыЗаписиXML неизменяемы после создания. Все пять параметров задаются конструктором, а не присваиванием свойств.

Процедура ВыполнитьПример() Экспорт
    Параметры = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Ложь, Ложь, "  ");
    Поток = Новый ПотокВПамяти;
    Запись = Новый ЗаписьXML;
    Попытка
        Запись.ОткрытьПоток(Поток, Параметры, Ложь);
        Запись.ЗаписатьОбъявлениеXML();
        Запись.ЗаписатьНачалоЭлемента("catalog");
        Запись.ЗаписатьНачалоЭлемента("product");
        Запись.ЗаписатьАтрибут("code", "A&B");
        Запись.ЗаписатьАтрибут("quantity", "3");
        Запись.ЗаписатьТекст("Книга <учебник> & пособие");
        Запись.ЗаписатьКонецЭлемента();
        Запись.ЗаписатьКонецЭлемента();
        Запись.Закрыть();
        Сообщить(Поток.Размер() > 0);
        Поток.Перейти(0, ПозицияВПотоке.Начало);
        Чтение = Новый ЧтениеXML;
        Попытка
            Чтение.ОткрытьПоток(Поток);
            Пока Чтение.Прочитать() Цикл
                Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
                    И Чтение.ЛокальноеИмя = "product" Тогда
                    Сообщить(Чтение.ПолучитьАтрибут("code") = "A&B");
                    Сообщить(Чтение.ПолучитьАтрибут("quantity") = "3");
                КонецЕсли;
            КонецЦикла;
        Исключение
            Чтение.Закрыть();
            ВызватьИсключение;
        КонецПопытки;
        Чтение.Закрыть();
    Исключение
        ОшибкаОперации = ОписаниеОшибки();
        Запись.Закрыть();
        Поток.Закрыть();
        ВызватьИсключение ОшибкаОперации;
    КонецПопытки;
    Поток.Закрыть();
КонецПроцедуры

Разбор по шагам

  1. Создать собственный поток и параметры UTF-8. Передать Ложь третьим аргументом: BOM не добавляется.

  2. Записать объявление и товар штатными методами. Закрыть писатель до перехода к чтению.

  3. Проверить ненулевой размер потока и переместить его позицию в начало.

  4. Открыть ЧтениеXML на потоке, пройти весь XML, проверить атрибуты и закрыть читатель и поток, включая ветку ошибки.

Как проверить результат

  1. Три проверки дают Истина.

  2. Поток содержит байты XML, но на диске ничего не создано. В отладчике проверьте начало данных без UTF-8 BOM EF BB BF.

Ожидаемый результат

Самостоятельный рецепт байтового XML для дальнейшей передачи без файловой зависимости.

На что обратить внимание

  1. Кодировка строки и байты потока — разные вещи. В этом уроке UTF-8 применяется к реальной записи байтов.

  2. Перед обратным чтением нужен переход в начало. Запись завершена до чтения того же потока.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.