ДокументDOM.ИмпортироватьУзел

Методы · ImportNode

Импортирует узел из другого документа DOM в данный. Для каждого узла импортируются свойства ТипУзла, ИмяУзла, а также свойства, относящиеся к пространствам имен: ЛокальноеИмя, Префикс, URIПространстваИмен. Пользовательские данные не переносятся. Правила импорта для типов узлов: Атрибут - ЭлементВладелец устанавливается в Неопределено, признак Указан устанавливается в Истина, импортируются все потомки узла; ФрагментДокумента - если признак "глубокого" импортирования установлен, то все потомки фрагмента рекурсивно копируются в новый фрагмент, в противном случае просто создается пустой узел ФрагментДокумента; Документ - не может быть импортирован; ОпределениеТипаДокумента - не может быть импортирован; Элемент - атрибуты с установленным свойством Указан импортируются, для нового узла-элемента создаются атрибуты, имеющие значения по умолчанию; Сущность - узлы могут быть импортированы, даже если документ находится в режиме Только для чтения. Свойства ПубличныйИдентификатор, СистемныйИдентификатор и ИмяНотации копируются; СсылкаНаСущность - импортируется только данный узел. Если в данном документе определена сущность с таким же именем, то формируется значение сущности для импортированной ссылки; Нотация - узлы могут быть импортированы, даже если документ находится в режиме Только для чтения. Свойства ПубличныйИдентификатор, СистемныйИдентификатор копируются; ИнструкцияОбработки - копируются свойства Цель и Данные; Текст, СекцияCDATA, Комментарий - копируются свойства ТекстDOM.Данные

Синтаксис

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

ДокументDOM.ИмпортироватьУзел (DOMDocument.ImportNode)

ДокументDOM (DOMDocument)

ИмпортироватьУзел (ImportNode)

Доступен, начиная с версии 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.

Описание:

Импортирует узел из другого документа DOM в данный.
Для каждого узла импортируются свойства ТипУзла, ИмяУзла, а также свойства, относящиеся к пространствам имен: ЛокальноеИмя, Префикс, URIПространстваИмен. Пользовательские данные не переносятся.
Правила импорта для типов узлов:
Атрибут - ЭлементВладелец устанавливается в Неопределено, признак Указан устанавливается в Истина, импортируются все потомки узла;

ФрагментДокумента - если признак "глубокого" импортирования установлен, то все потомки фрагмента рекурсивно копируются в новый фрагмент, в противном случае просто создается пустой узел ФрагментДокумента;

Документ - не может быть импортирован;

ОпределениеТипаДокумента - не может быть импортирован;

Элемент - атрибуты с установленным свойством Указан импортируются, для нового узла-элемента создаются атрибуты, имеющие значения по умолчанию;

Сущность - узлы могут быть импортированы, даже если документ находится в режиме Только для чтения. Свойства ПубличныйИдентификатор, СистемныйИдентификатор и ИмяНотации копируются;

СсылкаНаСущность - импортируется только данный узел. Если в данном документе определена сущность с таким же именем, то формируется значение сущности для импортированной ссылки;

Нотация - узлы могут быть импортированы, даже если документ находится в режиме Только для чтения. Свойства ПубличныйИдентификатор, СистемныйИдентификатор копируются;

ИнструкцияОбработки - копируются свойства Цель и Данные;

Текст, СекцияCDATA, Комментарий - копируются свойства ТекстDOM.Данные, КомментарийDOM.Данные, СекцияCDATADOM.Данные и ТекстDOM.Размер, КомментарийDOM.Размер, СекцияCDATADOM.Размер.

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

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

Примечание:
Причины вызова исключений:
импортируемые имена содержат символы, недопустимые стандартом XML данного документа.

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

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

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

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

Импортировать товар в другой DOM-документ без изменения оригинала

Узел связан с документом-владельцем. Глубокий импорт создаёт узел для другого документа; сравниваем содержимое и идентичность.

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

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

Подготовка

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

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


Источник = Новый ДокументDOM("", "products");
Товар = Источник.СоздатьЭлемент("product");
Товар.УстановитьАтрибут("code", "A-01");
Товар.ДобавитьДочерний(Источник.СоздатьТекстовыйУзел("Книга"));
Источник.ЭлементДокумента.ДобавитьДочерний(Товар);
Товар.УстановитьПользовательскиеДанные("source", "Учебный импорт");
Приёмник = Новый ДокументDOM("", "export");
Копия = Приёмник.ИмпортироватьУзел(Товар, Истина);
Сообщить(Копия.ДокументВладелец = Приёмник);
Сообщить(Копия.РодительскийУзел = Неопределено);
Сообщить(Копия.УзелРавен(Товар));
Сообщить(Не Копия.УзелИдентичен(Товар));
Сообщить(Товар.ПолучитьПользовательскиеДанные("source"));
Сообщить(Копия.ПолучитьПользовательскиеДанные("source") = Неопределено);
Приёмник.ЭлементДокумента.ДобавитьДочерний(Копия);
Копия.ТекстовоеСодержимое = "Учебная копия";
Сообщить(Товар.ТекстовоеСодержимое = "Книга");
Сообщить(Копия.ТекстовоеСодержимое = "Учебная копия");
Сообщить(Не Копия.УзелРавен(Товар));
Сообщить(Товар.РодительскийУзел = Источник.ЭлементДокумента);

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

  1. Создаём товар в документе Источник и прикрепляем его к исходному корню.

  2. ИмпортироватьУзел с Истина копирует дочерние узлы в документ Приёмник, но ещё не прикрепляет результат к его корню.

  3. УзелРавен сравнивает содержимое, УзелИдентичен — является ли это тем же узлом. Равная копия не идентична оригиналу.

  4. Пользовательские данные DOM не переносятся импортом. После изменения текста копии исходный товар остаётся неизменным.

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

  1. Копия до вставки принадлежит Приёмнику и не имеет родителя.

  2. Содержимое до изменения равно, идентичность различна; после изменения содержимое уже не равно.

  3. Оригинал сохраняет Книга и прежнего родителя; source у копии отсутствует.

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

Товар перенесён в другой документ через независимую копию с явной проверкой владельца и данных.

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

  1. Нельзя просто добавить исходный узел другого документа как свой: используйте импорт.

  2. ТекстовоеСодержимое заменяет содержимое элемента, а не только визуальную подпись; вложенная структура при этом меняется.

  3. Пользовательские данные — не XML-атрибуты и не часть сериализованного контракта.

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

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

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

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

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