КонфигурацияЗаписиDOM

Типы · DOMWriterConfiguration

Конфигурация объекта записи DOM. "discard-default-content" - признак удаления неявных атрибутов (не присутствующих в исходном документе, но добавленных по схеме) (Булево); "xml-declaration" - признак необходимости записывать объявление XML (Булево).

Полное описание, параметры и ограничения

КонфигурацияЗаписиDOM (DOMWriterConfiguration)

КонфигурацияЗаписиDOM (DOMWriterConfiguration)

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

Свойства:
ИменаПараметров (ParameterNames)

Методы:
ВозможноУстановитьПараметр (CanSetParameter)
ПолучитьПараметр (GetParameter)
УстановитьПараметр (SetParameter)

Описание:

Конфигурация объекта записи DOM.
"discard-default-content" - признак удаления неявных атрибутов (не присутствующих в исходном документе, но добавленных по схеме) (Булево);
"xml-declaration" - признак необходимости записывать объявление XML (Булево).

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

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

См. также:
ЗаписьDOM, свойство КонфигурацияDOM

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

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

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

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

Получить XML-строку с объявлением и без него

Управляем параметром xml-declaration объекта ЗаписьDOM. Обе строки передаются в память; наличие encoding в заголовке не доказывает кодировку ещё не существующего файла.

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

Полный текст собственного серверного общего модуля УчебныеЗадачи. Замените его учебное содержимое всем кодом ниже: процедура ВыполнитьПример уже включена, вспомогательная функция размещается после неё, не внутри процедуры.

Подготовка

  1. Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.

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

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

  4. У методов DOM возвращаемый узел сохраняйте в переменную: исходная ссылка и результат операции не всегда обозначают один объект.

Процедура ВыполнитьПример() Экспорт
    Документ = Новый ДокументDOM("", "product");
    Документ.ЭлементДокумента.ДобавитьДочерний(Документ.СоздатьТекстовыйУзел("Книга"));
    Сериализатор = Новый ЗаписьDOM;
    Настройки = Сериализатор.КонфигурацияDOM;
    Имена = Настройки.ИменаПараметров;
    Сообщить(Имена.Содержит("xml-declaration"));
    Если Не Настройки.ВозможноУстановитьПараметр("xml-declaration", Ложь)
        Или Не Настройки.ВозможноУстановитьПараметр("xml-declaration", Истина) Тогда
        ВызватьИсключение "Оба режима объявления XML должны поддерживаться";
    КонецЕсли;
    Прежнее = Настройки.ПолучитьПараметр("xml-declaration");
    Попытка
        Настройки.УстановитьПараметр("xml-declaration", Ложь);
        БезОбъявления = ЗаписатьУчебнуюСтроку(Сериализатор, Документ);
        Настройки.УстановитьПараметр("xml-declaration", Истина);
        СОбъявлением = ЗаписатьУчебнуюСтроку(Сериализатор, Документ);
    Исключение
        Настройки.УстановитьПараметр("xml-declaration", Прежнее);
        ВызватьИсключение;
    КонецПопытки;
    Настройки.УстановитьПараметр("xml-declaration", Прежнее);
    Сообщить(СтрНайти(БезОбъявления, "<?xml") = 0);
    Сообщить(СтрНайти(СОбъявлением, "<?xml") > 0);
    Сообщить(СтрНайти(БезОбъявления, "Книга") > 0);
    Сообщить(СтрНайти(СОбъявлением, "Книга") > 0);
    Сообщить(Настройки.ПолучитьПараметр("xml-declaration") = Прежнее);
    Сообщить(БезОбъявления);
    Сообщить(СОбъявлением);
КонецПроцедуры

Функция ЗаписатьУчебнуюСтроку(Сериализатор, Документ)
    Вывод = Новый ЗаписьXML;
    Вывод.УстановитьСтроку();
    Попытка
        Сериализатор.Записать(Документ, Вывод);
    Исключение
        Вывод.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Возврат Вывод.Закрыть();
КонецФункции

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

  1. Один документ с текстом Книга сериализуем одним объектом ЗаписьDOM, меняя только xml-declaration.

  2. Перед изменением проверяем имя параметра и возможность обоих значений. Каждая сериализация использует новое собственное ЗаписьXML для записи в строку.

  3. Первый результат не содержит объявления <?xml, второй содержит. Текст товара сохраняется в обоих результатах.

  4. Прежнюю настройку восстанавливаем в обеих ветках завершения. Выводим строки, чтобы заголовок был виден без отладчика.

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

  1. Наличие параметра и пять последующих логических сравнений дают Истина.

  2. Одна строка начинается содержимым product, вторая имеет объявление XML перед ним; обе содержат Книга.

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

Получены два варианта сериализации одного XML для разных контрактов обмена.

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

  1. Не добавляйте объявление вручную поверх результата, если сериализатор уже его записал: два объявления дадут некорректный XML.

  2. Пример создаёт строки, не байты. Кодировка файла или HTTP-тела выбирается на следующем этапе записи/передачи.

  3. Для XML-фрагмента внутри другого документа отдельное объявление обычно не требуется; согласуйте формат с получателем.

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

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

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

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

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