ТекстDOM.УдалитьДочерний

Методы · RemoveChild

Удаляет узел из списка дочерних узлов.

Синтаксис

УдалитьДочерний(<Узел>)
Полное описание, параметры и ограничения

ТекстDOM.УдалитьДочерний (DOMText.RemoveChild)

ТекстDOM (DOMText)

УдалитьДочерний (RemoveChild)

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

Синтаксис:
УдалитьДочерний(<Узел>)
Параметры:

<Узел> (обязательный)
Тип: АтрибутDOM, ДокументDOM, ЭлементDOM, ОпределениеТипаДокументаDOM, НотацияDOM, СущностьDOM, ФрагментДокументаDOM, ТекстDOM, КомментарийDOM, СекцияCDATADOM, ИнструкцияОбработкиDOM, СсылкаНаСущностьDOM, ПространствоИменXPath.
Удаляемый узел DOM.
Возвращаемое значение:
Тип: АтрибутDOM, ДокументDOM, ЭлементDOM, ОпределениеТипаДокументаDOM, НотацияDOM, СущностьDOM, ФрагментДокументаDOM, ТекстDOM, КомментарийDOM, СекцияCDATADOM, ИнструкцияОбработкиDOM, СсылкаНаСущностьDOM, ПространствоИменXPath.
Удаляемый узел.
Описание:

Удаляет узел из списка дочерних узлов.

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

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

Примечание:
Исключение вызывается в случаях:
если данный узел в режиме Только для чтения;

если удаляемый узел не найден;

если удаляемый узел является дочерним узлом узла Документ, исключение генерируется в случае, если реализация не поддерживает удаление узлов ОпределениеТипаДокумента и Элемент.

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

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

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

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

Понять, почему у текста, CDATA, комментария и инструкции нет дочерних элементов

Наличие общих методов DOM у листового узла не означает, что он может содержать element. Проверяем отказы и сохраняем значения четырёх реальных видов узлов.

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

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

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

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

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

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

Документ = Новый ДокументDOM("", "product");
Листья = Новый Массив;
Листья.Добавить(Документ.СоздатьТекстовыйУзел("Книга"));
Листья.Добавить(Документ.СоздатьСекциюCDATA("<описание>"));
Листья.Добавить(Документ.СоздатьКомментарий("Учебный товар"));
Листья.Добавить(Документ.СоздатьИнструкциюОбработки("guide", "mode=test"));
Для Каждого Лист Из Листья Цикл
    ПрежнееЗначение = Лист.ЗначениеУзла;
    Кандидат = Документ.СоздатьЭлемент("note");
    Отказов = 0;
    Попытка
        Лист.ДобавитьДочерний(Кандидат);
    Исключение
        Отказов = Отказов + 1;
    КонецПопытки;
    Попытка
        Лист.ВставитьПеред(Кандидат, Неопределено);
    Исключение
        Отказов = Отказов + 1;
    КонецПопытки;
    Попытка
        Лист.ЗаменитьДочерний(Кандидат, Кандидат);
    Исключение
        Отказов = Отказов + 1;
    КонецПопытки;
    Попытка
        Лист.УдалитьДочерний(Кандидат);
    Исключение
        Отказов = Отказов + 1;
    КонецПопытки;
    Если Отказов <> 4 Тогда
        ВызватьИсключение "Неожиданно принята недопустимая операция над листовым узлом";
    КонецЕсли;
    Лист.Нормализовать();
    Сообщить(СтрШаблон("%1: ожидаемых отказов %2", ТипЗнч(Лист), Отказов));
    Сообщить(Лист.ДочерниеУзлы.Количество() = 0);
    Сообщить(Лист.ЗначениеУзла = ПрежнееЗначение);
    Сообщить(Кандидат.РодительскийУзел = Неопределено);
КонецЦикла;

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

  1. Создаём четыре листовых узла. Ни один не содержит детей; candidate note тоже принадлежит тому же документу, чтобы не спутать ошибку иерархии с другим владельцем.

  2. Добавление и вставка элемента запрещены для этих видов узлов. Замена/удаление также не находят существующего ребёнка: candidate не находится у листа.

  3. Каждую ожидаемую ошибку считаем отдельно. Проверка общего количества выполняется вне этих блоков, иначе можно ошибочно засчитать собственное контрольное исключение.

  4. Нормализовать допустим как общий метод, но у листа нечего объединять. Значение и пустой список детей не меняются.

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

  1. Для каждого из четырёх видов выводится ожидаемых отказов 4.

  2. Для каждого вида три логические проверки дают Истина: нет детей, значение прежнее, candidate отсоединён.

  3. Всего 16 ожидаемых отказов. Ни один не подавляет неожиданное успешное изменение: оно вызовет контрольную ошибку.

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

Объяснено поведение общих методов на листовых узлах вместо фиктивного примера добавления невозможных детей.

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

  1. Этот пример намеренно демонстрирует ошибки на собственных данных; в рабочем алгоритме проверяйте вид узла заранее.

  2. Для описания с вложенными тегами создавайте ЭлементDOM-контейнер и помещайте в него текст/элементы. ТекстDOM сам контейнером не является.

  3. Не переносите правило на АтрибутDOM: его представление значения может включать текстовые дочерние узлы, это другой вид DOM-узла.

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

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

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

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

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