Переименовывает узлы Элемент и Атрибут. Выполняется попытка переименования существующего узла, в случае невозможности, создает новый узел с новым именем, префиксом и URI пространства имен и заменяет им исходный узел.
Синтаксис
ПереименоватьУзел(<Узел>, <URIПространстваИмен>, <КвалифицированноеИмя>)Полное описание, параметры и ограничения
ДокументDOM.ПереименоватьУзел (DOMDocument.RenameNode)
ДокументDOM (DOMDocument)
ПереименоватьУзел (RenameNode)
Доступен, начиная с версии 8.1.
Синтаксис:
ПереименоватьУзел(<Узел>, <URIПространстваИмен>, <КвалифицированноеИмя>)
Параметры:
<Узел> (обязательный)
Тип: АтрибутDOM, ЭлементDOM.
Переименовываемый узел DOM.
<URIПространстваИмен> (обязательный)
Тип: Строка.
URI пространства имен переименовываемого элемента/атрибута.
<КвалифицированноеИмя> (обязательный)
Тип: Строка.
Новое квалифицируемое имя переименовываемого узла.
Возвращаемое значение:
Тип: АтрибутDOM, ДокументDOM, ЭлементDOM, ОпределениеТипаДокументаDOM, НотацияDOM, СущностьDOM, ФрагментДокументаDOM, ТекстDOM, КомментарийDOM, СекцияCDATADOM, ИнструкцияОбработкиDOM, СсылкаНаСущностьDOM, ПространствоИменXPath.
Описание:
Переименовывает узлы Элемент и Атрибут.
Выполняется попытка переименования существующего узла, в случае невозможности, создает новый узел с новым именем, префиксом и URI пространства имен и заменяет им исходный узел.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Причины вызова исключений:
попытка переименования узлов, отличных от Элемент или Атрибут, или в случае, если реализация не поддерживает переименование узлов;
квалифицированное имя содержит символы, недопустимые стандартом XML данного документа;
попытка переименования узла, созданного другим документом DOM;
квалифицированное имя содержит префикс, значение которого недопустимо для данного значения URI пространства имен.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Переименовать XML-товар и атрибут с сохранением нового узла
После переименования может вернуться прежний или новый объект. Поэтому продолжаем работу только с возвращённым узлом и проверяем его актуальные имя и URI.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.
Сначала оставьте учебные имена и значения неизменёнными. После контрольного запуска меняйте по одному условию.
Преобразования выполняются только над собственным XML в памяти. Примеры не читают файлы, внешние DTD, URL или данные информационной базы.
У методов DOM возвращаемый узел сохраняйте в переменную: исходная ссылка и результат операции не всегда обозначают один объект.
URI = "urn:guide:products";
Документ = Новый ДокументDOM(URI, "g:products");
Корень = Документ.ЭлементДокумента;
Корень.УстановитьСоответствиеПространстваИмен("g", URI);
Товар = Документ.СоздатьЭлемент(URI, "g:product");
Атрибут = Документ.СоздатьАтрибут("code");
Атрибут.Значение = "A-01";
Товар.УстановитьУзелАтрибута(Атрибут);
Товар.ДобавитьДочерний(Документ.СоздатьТекстовыйУзел("Книга"));
Корень.ДобавитьДочерний(Товар);
Товар = Документ.ПереименоватьУзел(Товар, URI, "g:item");
Сообщить(Товар.ЛокальноеИмя = "item");
Сообщить(Товар.Префикс = "g");
Сообщить(Товар.URIПространстваИмен = URI);
Сообщить(Товар.РодительскийУзел = Корень);
Сообщить(Товар.ТекстовоеСодержимое = "Книга");
Атрибут = Товар.ПолучитьУзелАтрибута("code");
Атрибут = Документ.ПереименоватьУзел(Атрибут, "", "sku");
Сообщить(Атрибут.Имя = "sku");
Сообщить(Атрибут.Значение = "A-01");
Сообщить(Товар.ПолучитьАтрибут("code") = Неопределено);
Сообщить(Товар.ПолучитьАтрибут("sku") = "A-01");
Сообщить(Корень.ПервыйДочерний.УзелИдентичен(Товар));Разбор по шагам
Создаём namespace-aware product и обычный атрибут code; оба принадлежат собственному документу.
ПереименоватьУзел возвращает результат, который сразу присваиваем Товар. Имя становится g:item, URI не меняется, содержимое Книга сохраняется.
Заново получаем атрибут актуального элемента и переименовываем code в sku. Атрибут также сохраняем из результата операции.
Проверяем, что code исчез из актуального элемента, sku содержит A-01 и корень ссылается именно на актуальный Товар.
Как проверить результат
Все десять логических сообщений дают Истина.
Получена структура products/item с атрибутом sku=A-01 и текстом Книга.
Ожидаемый результат
Показан корректный шаблон переименования без предположения о сохранении идентичности исходного узла.
На что обратить внимание
Метод предназначен только для ЭлементDOM и АтрибутDOM. Для текста или комментария он вызывает исключение.
Узел должен принадлежать документу, вызывающему метод. Переименование не является импортом из другого документа.
Не сохраняйте старую ссылку на атрибут до переименования элемента как единственный источник истины: реализация может заменить элемент новым узлом.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.