Нормализация объединяет соседние текстовые узлы. Дополнительное удаление комментариев зависит от поддержки параметра comments; обе ветки результата объяснены.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.
Сначала оставьте учебные имена и значения неизменёнными. После контрольного запуска меняйте по одному условию.
Преобразования выполняются только над собственным XML в памяти. Примеры не читают файлы, внешние DTD, URL или данные информационной базы.
У методов DOM возвращаемый узел сохраняйте в переменную: исходная ссылка и результат операции не всегда обозначают один объект.
Документ = Новый ДокументDOM("", "product");
Корень = Документ.ЭлементДокумента;
Корень.ДобавитьДочерний(Документ.СоздатьТекстовыйУзел("Кни"));
Корень.ДобавитьДочерний(Документ.СоздатьТекстовыйУзел(""));
Корень.ДобавитьДочерний(Документ.СоздатьТекстовыйУзел("га"));
Корень.ДобавитьДочерний(Документ.СоздатьКомментарий("Учебная заметка"));
Сообщить(Корень.ДочерниеУзлы.Количество() = 4);
Настройки = Документ.КонфигурацияDOM;
Имена = Настройки.ИменаПараметров;
Для Индекс = 0 По Имена.Количество() - 1 Цикл
Сообщить("Параметр документа: " + Имена.Элемент(Индекс));
КонецЦикла;
УдалятьКомментарии = Имена.Содержит("comments") И Настройки.ВозможноУстановитьПараметр("comments", Ложь);
Если УдалятьКомментарии Тогда
Прежнее = Настройки.ПолучитьПараметр("comments");
Настройки.УстановитьПараметр("comments", Ложь);
Попытка
Документ.НормализоватьДокумент();
Исключение
Настройки.УстановитьПараметр("comments", Прежнее);
ВызватьИсключение;
КонецПопытки;
Настройки.УстановитьПараметр("comments", Прежнее);
Сообщить(Настройки.ПолучитьПараметр("comments") = Прежнее);
Иначе
Сообщить("Удаление комментариев настройкой не поддерживается; нормализуем только текст обычным методом");
Документ.Нормализовать();
КонецЕсли;
Сообщить(Корень.ПервыйДочерний.ТекстовоеСодержимое = "Книга");
Сообщить(Корень.ТекстовоеСодержимое = "Книга");
Если УдалятьКомментарии Тогда
Сообщить(Корень.ДочерниеУзлы.Количество() = 1);
Иначе
Сообщить(Корень.ДочерниеУзлы.Количество() = 2);
КонецЕсли;Разбор по шагам
Вручную создаём три соседних текста, включая пустой, и комментарий. До нормализации это четыре ребёнка, хотя текстовое содержимое уже равно Книга.
Запрашиваем ИменаПараметров у документа. Значение comments из стандарта DOM проверяем на поддержку в этой платформе перед чтением и присваиванием.
Если поддерживается comments=Ложь, НормализоватьДокумент объединяет текст и удаляет комментарий. Иначе обычный Нормализовать объединяет текст, сохраняя комментарий.
Настройку восстанавливаем, но восстановление параметра не возвращает удалённый комментарий. Сам документ был изменён.
Как проверить результат
Начальная проверка четырёх детей и обе проверки текста дают Истина.
При поддержке comments после нормализации один текстовый ребёнок. Без поддержки — текст и комментарий, всего два; соответствующая проверка Истина.
В ветке comments также проверяется восстановление прежнего значения настройки.
Ожидаемый результат
Показано различие нормальной формы текста и дополнительной политики обработки комментариев.
На что обратить внимание
Смысл comments=Ложь определён DOM Level 3 Core, а поддержку и допустимость значения проверяет текущая платформа: https://www.w3.org/TR/DOM-Level-3-Core/core.html#DOMConfiguration .
НормализоватьДокумент не является проверкой бизнес-схемы товара и не делает недоверенный текст безопасным HTML.
Если нужно сохранить исходное дерево, нормализуйте его полную копию, а не рабочий оригинал.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.