СсылкаНаСущностьDOM.КлонироватьУзел

Методы · CloneNode

Копирует (клонирует) данный узел. Для копии не определены родительский узел и пользовательские данные. Копирование узла Элемент копирует все атрибуты и их значения, включая сгенерированные XML процессором значения по умолчанию. Копирование дочерних узлов производится только в случае установленного признака "глубокого" копирования. "Глубокое" копирование включает текст, содержащийся в узле Элемент, если текст содержится как дочерний узел Текст. Копирование узлов Атрибут отличается от копирования их как части узла Элемент тем, что признак явного указания свойства Указан будет установлен в значение Истина. Копирование узлов Атрибут всегда выполняется с копированием дочерних узлов (представляющих значение атрибута), вне зависимости от режима копирования. Копирование узла СсылкаНаСущность автоматически конструирует поддерево, если соответствующий узел Сущность доступен, вне зависимости от режима копирования. Копирование других типов узлов просто возвращает копию данного узла. В случае копирования поддерева в режиме Только для чтения создает редактируемую копию, но дочерние узлы копии узла СсылкаНаСущность останутся в режиме Только для чтения.

Синтаксис

КлонироватьУзел(<ГлубокоеКопирование>)
Полное описание, параметры и ограничения

СсылкаНаСущностьDOM.КлонироватьУзел (DOMEntityReference.CloneNode)

СсылкаНаСущностьDOM (DOMEntityReference)

КлонироватьУзел (CloneNode)

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

Синтаксис:
КлонироватьУзел(<ГлубокоеКопирование>)
Параметры:

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

Копирует (клонирует) данный узел.
Для копии не определены родительский узел и пользовательские данные.
Копирование узла Элемент копирует все атрибуты и их значения, включая сгенерированные XML процессором значения по умолчанию.
Копирование дочерних узлов производится только в случае установленного признака "глубокого" копирования. "Глубокое" копирование включает текст, содержащийся в узле Элемент, если текст содержится как дочерний узел Текст.
Копирование узлов Атрибут отличается от копирования их как части узла Элемент тем, что признак явного указания свойства Указан будет установлен в значение Истина. Копирование узлов Атрибут всегда выполняется с копированием дочерних узлов (представляющих значение атрибута), вне зависимости от режима копирования.
Копирование узла СсылкаНаСущность автоматически конструирует поддерево, если соответствующий узел Сущность доступен, вне зависимости от режима копирования.
Копирование других типов узлов просто возвращает копию данного узла.
В случае копирования поддерева в режиме Только для чтения создает редактируемую копию, но дочерние узлы копии узла СсылкаНаСущность останутся в режиме Только для чтения.

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

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

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

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

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

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

Клонировать ссылку и DOCTYPE, но не namespace XPath

Клон — другой объект. Копирование неопределённой ссылки не создаёт её объявления. Для namespace справка прямо запрещает КлонироватьУзел.

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

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

Подготовка

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

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

  3. DOCTYPE создан собственным конструктором с пустыми PUBLIC/SYSTEM. Внутренних сущностей/нотаций нет; guideProduct — намеренно неопределённая ссылка, а не загруженный товар.

  4. Этот документ исследуется только в памяти. Не сохраняйте и не передавайте его как готовый XML обмена: ссылка guideProduct не объявлена.

  5. XPath namespace::g возвращает специализированный узел, а не строку URI и не обычный атрибут xmlns.

ОписаниеТипа = Новый ОпределениеТипаДокументаDOM("products", "", "");
Документ = Новый ДокументDOM("urn:guide:special", "g:products", ОписаниеТипа);
Корень = Документ.ЭлементДокумента;
Корень.УстановитьСоответствиеПространстваИмен("g", "urn:guide:special");
Ссылка = Документ.СоздатьСсылкуНаСущность("guideProduct");
Корень.ДобавитьДочерний(Ссылка);
Разыменователь = Документ.СоздатьРазыменовательПИ();
Результат = Документ.ВычислитьВыражениеXPath("namespace::g", Корень,
    Разыменователь, ТипРезультатаDOMXPath.НеупорядоченныйСнимокУзлов);
Если Результат.РазмерСнимка <> 1 Тогда
    ВызватьИсключение "Ожидался ровно один собственный namespace g";
КонецЕсли;
Пространство = Результат.ЭлементСнимка(0);
Если ТипЗнч(Пространство) <> Тип("ПространствоИменXPath") Тогда
    ВызватьИсключение "Ожидался настоящий узел ПространствоИменXPath";
КонецЕсли;
Узлы = Новый Массив;
Узлы.Добавить(ОписаниеТипа);
Узлы.Добавить(Ссылка);
Узлы.Добавить(Пространство);
КопияТипа = ОписаниеТипа.КлонироватьУзел(Истина);
КопияСсылки = Ссылка.КлонироватьУзел(Истина);
Сообщить(ОписаниеТипа.УзелРавен(КопияТипа));
Сообщить(Не ОписаниеТипа.УзелИдентичен(КопияТипа));
Сообщить(Ссылка.УзелРавен(КопияСсылки));
Сообщить(Не Ссылка.УзелИдентичен(КопияСсылки));
Сообщить(КопияСсылки.ДочерниеУзлы.Количество() = 0);
Отказ = Ложь;
Попытка
    КопияПИ = Пространство.КлонироватьУзел(Истина);
    Сообщить(ТипЗнч(КопияПИ));
Исключение
    Отказ = Истина;
    Сообщить("Ожидаемый запрет копирования namespace: " + ОписаниеОшибки());
КонецПопытки;
Сообщить(Отказ);
Сообщить(Пространство.УзелИдентичен(Пространство));
Сообщить(Пространство.УзелРавен(Пространство));

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

  1. Глубокое копирование у пустых DOCTYPE/ссылки не добавляет неизвестное содержимое.

  2. УзелРавен сравнивает содержимое, УзелИдентичен — один ли это объект. Клон равен, но не идентичен.

  3. Копирование namespace помещаем в отдельную отрицательную проверку; контроль Отказ расположен вне перехвата.

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

  1. Пять первых сравнений дают Истина; исходные узлы остаются в дереве.

  2. Для namespace Отказ = Истина; сам узел равен/идентичен самому себе, но это не разрешает его копирование.

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

Разобраны разница копии и идентичности и запрет клонирования namespace.

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

  1. Не считайте пойманную ошибку копирования успешным клонированием.

  2. Копирование DOM не выполняет импорт товаров или бизнес-запись.

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

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

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

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

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