Копирует (клонирует) данный узел. Для копии не определены родительский узел и пользовательские данные. Копирование узла Элемент копирует все атрибуты и их значения, включая сгенерированные XML процессором значения по умолчанию. Копирование дочерних узлов производится только в случае установленного признака "глубокого" копирования. "Глубокое" копирование включает текст, содержащийся в узле Элемент, если текст содержится как дочерний узел Текст. Копирование узлов Атрибут отличается от копирования их как части узла Элемент тем, что признак явного указания свойства Указан будет установлен в значение Истина. Копирование узлов Атрибут всегда выполняется с копированием дочерних узлов (представляющих значение атрибута), вне зависимости от режима копирования. Копирование узла СсылкаНаСущность автоматически конструирует поддерево, если соответствующий узел Сущность доступен, вне зависимости от режима копирования. Копирование других типов узлов просто возвращает копию данного узла. В случае копирования поддерева в режиме Только для чтения создает редактируемую копию, но дочерние узлы копии узла СсылкаНаСущность останутся в режиме Только для чтения.
Синтаксис
КлонироватьУзел(<ГлубокоеКопирование>)Полное описание, параметры и ограничения
ИнструкцияОбработкиDOM.КлонироватьУзел (DOMProcessingInstruction.CloneNode)
ИнструкцияОбработкиDOM (DOMProcessingInstruction)
КлонироватьУзел (CloneNode)
Доступен, начиная с версии 8.1.
Синтаксис:
КлонироватьУзел(<ГлубокоеКопирование>)
Параметры:
<ГлубокоеКопирование> (обязательный)
Тип: Булево.
Признак "глубокого" копирования.
Возвращаемое значение:
Тип: АтрибутDOM, ДокументDOM, ЭлементDOM, ОпределениеТипаДокументаDOM, НотацияDOM, СущностьDOM, ФрагментДокументаDOM, ТекстDOM, КомментарийDOM, СекцияCDATADOM, ИнструкцияОбработкиDOM, СсылкаНаСущностьDOM, ПространствоИменXPath.
Копия данного узла.
Описание:
Копирует (клонирует) данный узел.
Для копии не определены родительский узел и пользовательские данные.
Копирование узла Элемент копирует все атрибуты и их значения, включая сгенерированные XML процессором значения по умолчанию.
Копирование дочерних узлов производится только в случае установленного признака "глубокого" копирования. "Глубокое" копирование включает текст, содержащийся в узле Элемент, если текст содержится как дочерний узел Текст.
Копирование узлов Атрибут отличается от копирования их как части узла Элемент тем, что признак явного указания свойства Указан будет установлен в значение Истина. Копирование узлов Атрибут всегда выполняется с копированием дочерних узлов (представляющих значение атрибута), вне зависимости от режима копирования.
Копирование узла СсылкаНаСущность автоматически конструирует поддерево, если соответствующий узел Сущность доступен, вне зависимости от режима копирования.
Копирование других типов узлов просто возвращает копию данного узла.
В случае копирования поддерева в режиме Только для чтения создает редактируемую копию, но дочерние узлы копии узла СсылкаНаСущность останутся в режиме Только для чтения.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Отличить неглубокую копию элемента от полной копии и служебных данных
Клонируем реальный элемент товара и его текст/комментарий/CDATA/инструкцию/атрибут/фрагмент. Копия равна по содержимому, но не идентична и не наследует локальную метку.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте весь приведённый код с собственной подготовкой восьми узлов.
Метки source-row и training-tag — локальные учебные значения, не атрибуты XML и не номера строк источника конфигурации.
Документ = Новый ДокументDOM("urn:guide:nodes", "g:guide");
Корень = Документ.ЭлементДокумента;
Корень.УстановитьСоответствиеПространстваИмен("g", "urn:guide:nodes");
Атрибут = Документ.СоздатьАтрибут("code");
Атрибут.Значение = "A-01";
Корень.УстановитьУзелАтрибута(Атрибут);
Текст = Документ.СоздатьТекстовыйУзел("Книга");
Комментарий = Документ.СоздатьКомментарий("учебный комментарий");
CDATA = Документ.СоздатьСекциюCDATA("<данные>");
Инструкция = Документ.СоздатьИнструкциюОбработки("guide", "mode=test");
Корень.ДобавитьДочерний(Текст);
Корень.ДобавитьДочерний(Комментарий);
Корень.ДобавитьДочерний(CDATA);
Корень.ДобавитьДочерний(Инструкция);
Фрагмент = Документ.СоздатьФрагментДокумента();
Фрагмент.ДобавитьДочерний(Документ.СоздатьЭлемент("note"));
Узлы = Новый Массив;
Узлы.Добавить(Документ);
Узлы.Добавить(Корень);
Узлы.Добавить(Атрибут);
Узлы.Добавить(Текст);
Узлы.Добавить(Комментарий);
Узлы.Добавить(CDATA);
Узлы.Добавить(Инструкция);
Узлы.Добавить(Фрагмент);
Корень.УстановитьПользовательскиеДанные("source-row", 7);
НеглубокаяКопия = Корень.КлонироватьУзел(Ложь);
ПолнаяКопия = Корень.КлонироватьУзел(Истина);
Сообщить(НеглубокаяКопия.ДочерниеУзлы.Количество() = 0);
Сообщить(НеглубокаяКопия.ЕстьАтрибут("code"));
Сообщить(ПолнаяКопия.ДочерниеУзлы.Количество() = 4);
Сообщить(ПолнаяКопия.УзелРавен(Корень));
Сообщить(Не ПолнаяКопия.УзелИдентичен(Корень));
Сообщить(ПолнаяКопия.РодительскийУзел = Неопределено);
Сообщить(Корень.ПолучитьПользовательскиеДанные("source-row") = 7);
Сообщить(ПолнаяКопия.ПолучитьПользовательскиеДанные("source-row") = Неопределено);
// Документ не клонируем: остальные семь видов созданы именно в нём.
Узлы.Удалить(0);
Для Каждого Узел Из Узлы Цикл
Узел.УстановитьПользовательскиеДанные("training-tag", "обработано");
Копия = Узел.КлонироватьУзел(Истина);
Сообщить(Узел.ПолучитьПользовательскиеДанные("training-tag") = "обработано");
Сообщить(Копия.ПолучитьПользовательскиеДанные("training-tag") = Неопределено);
Сообщить(Копия.УзелРавен(Узел));
Сообщить(Не Копия.УзелИдентичен(Узел));
КонецЦикла;Разбор по шагам
У элемента неглубокое клонирование сохраняет атрибуты, но не копирует детей. Полное копирует всё поддерево.
УзелРавен сравнивает содержимое по правилам DOM; УзелИдентичен проверяет один и тот же узел.
Копия отсоединена от родителя. Пользовательские данные не переносятся и не участвуют в равенстве.
Отдельно клонируем семь конкретных видов: элемент, атрибут, текст, комментарий, CDATA, инструкцию и фрагмент. Документ из этого цикла исключён.
Как проверить результат
Неглубокий элемент: 0 детей и сохранён code. Полный элемент: 4 ребёнка.
Полная копия равна, не идентична исходному корню и не имеет родителя.
Для всех семи отдельных видов копия не получает training-tag, хотя исходник её имеет.
Ожидаемый результат
Показаны реальные различия структуры копии, идентичности узла и служебных локальных меток.
На что обратить внимание
Клонирование не переносит узел в другой документ: для этого используйте ИмпортироватьУзел.
Изменение копии не следует интерпретировать как изменение исходного элемента.
Служебные данные DOM не сериализуются как XML-атрибуты; если нужен атрибут обмена, задайте его явно.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.