Записывает объявление XML. Если формируется XML-документ, а не фрагмент XML-документа, то в начало документа надо поместить его объявление. Для того чтобы поместить в документ его объявление, необходимо вызвать данный метод. При этом в начало документа помещается текст следующего вида: <?xml version="1.0"?>. Если при открытии файла или установке строки была указана кодировка, то в объявление также помещается и атрибут 'encoding'. Например: <?xml version="1.0" encoding="UTF-8"?>. Запись объявления XML должна выполняться перед другими операциями записи XML.
Синтаксис
ЗаписатьОбъявлениеXML()Примеры платформы
ЗаписьXML.ОткрытьФайл("c:/docs/data/xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();Полное описание, параметры и ограничения
ЗаписьFastInfoset.ЗаписатьОбъявлениеXML (FastInfosetWriter.WriteXMLDeclaration)
ЗаписьFastInfoset (FastInfosetWriter)
ЗаписатьОбъявлениеXML (WriteXMLDeclaration)
Доступен, начиная с версии 8.1.
Синтаксис:
ЗаписатьОбъявлениеXML()
Описание:
Записывает объявление XML.
Если формируется XML-документ, а не фрагмент XML-документа, то в начало документа надо поместить его объявление. Для того чтобы поместить в документ его объявление, необходимо вызвать данный метод. При этом в начало документа помещается текст следующего вида: <?xml version="1.0"?>.
Если при открытии файла или установке строки была указана кодировка, то в объявление также помещается и атрибут 'encoding'. Например: <?xml version="1.0" encoding="UTF-8"?>.
Запись объявления XML должна выполняться перед другими операциями записи XML.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Пример:
ЗаписьXML.ОткрытьФайл("c:/docs/data/xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Различить текст, CDATA и ЗаписатьБезОбработки в Fast Infoset
В бинарном writer ЗаписатьБезОбработки работает как запись текста: строка <b> не создаёт HTML-тег. Контекст xml:lang, xml:space и xml:base читается отдельно.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Учебная база на платформе 8.5.1.1343. Создайте серверный общий модуль УчебныеЗадачи и процедуру ВыполнитьПример() Экспорт; код урока без директив вставляйте в её тело. Каждый урок запускайте отдельно.
Все документы создаются из собственных строк и чисел в памяти. Не подставляйте файл XML, бинарный архив обмена, ссылки или данные рабочей базы вместо учебных значений.
Fast Infoset — двоичное представление XML. Для чтения нужен соответствующий reader, а не преобразование байтов в UTF-8-строку. Это не формат API Avito и не автоматическое сжатие произвольного JSON.
Запуск в 1С ещё не подтверждён; выполните контрольные проверки в учебной базе. Не сравнивайте точные байты двух кодировщиков: в заданиях проверяется восстановленная структура и значения.
Запись = Новый ЗаписьFastInfoset;
Запись.УстановитьДвоичныеДанные();
Попытка
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьКомментарий("Собственный текстовый урок");
Запись.ЗаписатьИнструкциюОбработки("guide", "mode=test");
Запись.ЗаписатьНачалоЭлемента("note");
Запись.ЗаписатьАтрибут("xml:lang", "ru");
Запись.ЗаписатьАтрибут("xml:space", "preserve");
Запись.ЗаписатьАтрибут("xml:base", "urn:guide:base");
Запись.ЗаписатьТекст(" ");
Запись.ЗаписатьСекциюCDATA("<описание>");
Запись.ЗаписатьБезОбработки("<b>учебный текст</b>");
Запись.ЗаписатьКонецЭлемента();
Данные = Запись.Закрыть();
Исключение
Запись.Закрыть();
ВызватьИсключение;
КонецПопытки;
Если ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
ВызватьИсключение "Не получены собственные Fast Infoset-данные";
КонецЕсли;
Сообщить(Данные.Размер() > 0);
Чтение = Новый ЧтениеFastInfoset;
Чтение.УстановитьДвоичныеДанные(Данные);
Попытка
Содержимое = "";
ДочернихЭлементов = 0;
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если Чтение.Имя = "note" Тогда
Сообщить(Чтение.Язык = "ru");
Сообщить(Чтение.ПробельныеСимволы = ПробельныеСимволыXML.Сохранять);
Сообщить(Чтение.БазовыйURI = "urn:guide:base");
Сообщить("Версия XML: " + Чтение.ВерсияXML);
Сообщить("Кодировка XML: " + Чтение.КодировкаXML);
Сообщить("Кодировка источника: " + Чтение.КодировкаИсточника);
Сообщить("Standalone: " + Строка(Чтение.Автономный));
Иначе
ДочернихЭлементов = ДочернихЭлементов + 1;
КонецЕсли;
КонецЕсли;
Если Чтение.ЭтоСимвольныеДанные Тогда
Содержимое = Содержимое + Чтение.Значение;
КонецЕсли;
КонецЦикла;
Сообщить(Содержимое = " <описание><b>учебный текст</b>");
Сообщить(ДочернихЭлементов = 0);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Разбор по шагам
Объявление, комментарий и инструкция обработки записываются отдельно от содержимого note.
Собственные xml:lang/space/base определяют контекст чтения; urn не скачивается и не является источником данных.
Символьные узлы накапливаем независимо от разбиения reader на Текст/СекцияCDATA/ПробельныеСимволы.
Для Fast Infoset локальная справка прямо приравнивает ЗаписатьБезОбработки к ЗаписатьТекст: <b> остаётся данными, не узлом.
Кодировки и версия выводятся как свойства reader; не делаем из них вывод о текстовом формате полученных бинарных байтов.
Как проверить результат
Контекст ru, Сохранять, urn:guide:base и два конечных сравнения ожидаются Истина.
После чтения есть строка с угловыми скобками, но ни одного дочернего b-элемента; пробелы сохранены.
Ожидаемый результат
Сохранён собственный текст и разобраны контекст и различие форматов writer.
На что обратить внимание
У ЗаписьXML семантика ЗаписатьБезОбработки отличается: не переносите этот вывод на текстовый XML-writer.
Наличие угловых скобок в тексте не является доказательством существования DOM-узла или безопасного HTML.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Записать два товара в двоичный XML и восстановить итог 800
Собственный документ содержит Книгу 3×250 и Ручку 1×50. Fast Infoset хранит структуру XML в байтах; сумма проверяется после чтения атрибутов.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Учебная база на платформе 8.5.1.1343. Создайте серверный общий модуль УчебныеЗадачи и процедуру ВыполнитьПример() Экспорт; код урока без директив вставляйте в её тело. Каждый урок запускайте отдельно.
Все документы создаются из собственных строк и чисел в памяти. Не подставляйте файл XML, бинарный архив обмена, ссылки или данные рабочей базы вместо учебных значений.
Fast Infoset — двоичное представление XML. Для чтения нужен соответствующий reader, а не преобразование байтов в UTF-8-строку. Это не формат API Avito и не автоматическое сжатие произвольного JSON.
Запуск в 1С ещё не подтверждён; выполните контрольные проверки в учебной базе. Не сравнивайте точные байты двух кодировщиков: в заданиях проверяется восстановленная структура и значения.
Запись = Новый ЗаписьFastInfoset;
Запись.УстановитьДвоичныеДанные();
Попытка
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("products");
Запись.ЗаписатьНачалоЭлемента("product");
Запись.ЗаписатьАтрибут("code", "A-01");
Запись.ЗаписатьАтрибут("quantity", "3");
Запись.ЗаписатьАтрибут("price", "250");
Запись.ЗаписатьТекст("Книга");
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("product");
Запись.ЗаписатьАтрибут("code", "B-02");
Запись.ЗаписатьАтрибут("quantity", "1");
Запись.ЗаписатьАтрибут("price", "50");
Запись.ЗаписатьТекст("Ручка");
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();
Данные = Запись.Закрыть();
Исключение
Запись.Закрыть();
ВызватьИсключение;
КонецПопытки;
Если ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
ВызватьИсключение "Не получены собственные Fast Infoset-данные";
КонецЕсли;
Сообщить(Данные.Размер() > 0);
Чтение = Новый ЧтениеFastInfoset;
Чтение.УстановитьДвоичныеДанные(Данные);
Попытка
Товаров = 0;
Сумма = 0;
Названия = "";
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.Имя = "product" Тогда
Количество = Чтение.ПолучитьАтрибут("quantity");
Цена = Чтение.ПолучитьАтрибут("price");
Если Количество = Неопределено Или Цена = Неопределено Тогда
ВызватьИсключение "В собственном товаре нет количества или цены";
КонецЕсли;
Товаров = Товаров + 1;
Сумма = Сумма + Число(Количество) * Число(Цена);
КонецЕсли;
Если Чтение.ЭтоСимвольныеДанные И Не Чтение.ЭтоПробельныеСимволы Тогда
Названия = Названия + Чтение.Значение;
КонецЕсли;
КонецЦикла;
Сообщить(Товаров = 2);
Сообщить(Сумма = 800);
Сообщить(Названия = "КнигаРучка");
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Разбор по шагам
Создаём ЗаписьFastInfoset и явно включаем запись в ДвоичныеДанные.
У каждого элемента есть три строковых XML-атрибута; начало и конец каждого элемента сбалансированы.
Закрыть возвращает байты; проверяем тип результата перед передачей в соответствующий reader.
У атрибутов сначала проверяем наличие, затем преобразуем собственные числовые строки. Названия восстанавливаем из символьных узлов.
Как проверить результат
Четыре сравнения Истина: непустые байты, два товара, сумма 800 и две кириллические подписи.
Замените цену книги в собственном источнике на 200: сумма станет 650 и проверка 800 выдаст Ложь.
Ожидаемый результат
Учебный двоичный XML проверен по восстановленным бизнес-значениям, не по его размеру.
На что обратить внимание
Fast Infoset-байты нельзя показывать как обычную UTF-8-строку XML.
Число вызывается на собственных константах: внешний XML требует дополнительной проверки типа, диапазона и формата.
Маленький учебный документ не доказывает выигрыш размера или скорости на реальном обмене.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.