ПространствоИменXPath.ЭлементВладелец

Свойства · OwnerElement

Тип: ЭлементDOM. Узел элемента DOM - владелец данного узла.

Полное описание, параметры и ограничения

ПространствоИменXPath.ЭлементВладелец (XPathNamespace.OwnerElement)

ПространствоИменXPath (XPathNamespace)

ЭлементВладелец (OwnerElement)

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

Использование:
Только чтение.
Описание:
Тип: ЭлементDOM.
Узел элемента DOM - владелец данного узла.
Доступность:

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

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

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

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

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

Получить три специальных узла XML и сравнить их паспорт

Создаём DOCTYPE, неопределённую ссылку и объявление namespace из результата XPath. Отсутствие атрибутов/детей у этих узлов не означает повреждение документа.

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

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

Подготовка

  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";
КонецЕсли;
Узлы = Новый Массив;
Узлы.Добавить(ОписаниеТипа);
Узлы.Добавить(Ссылка);
Узлы.Добавить(Пространство);
Для Каждого Узел Из Узлы Цикл
    Сообщить(ТипЗнч(Узел));
    Сообщить(Узел.ТипУзла);
    Сообщить(Узел.ИмяУзла);
    Сообщить(Узел.ЛокальноеИмя);
    Сообщить(Узел.URIПространстваИмен);
    Сообщить(Узел.Префикс);
    Сообщить(Узел.ЗначениеУзла);
    Сообщить(Узел.ТекстовоеСодержимое);
    Сообщить(Узел.БазовыйURI);
    Сообщить(Узел.ДокументВладелец);
    Сообщить(Узел.РодительскийУзел);
    Сообщить(Узел.ПервыйДочерний);
    Сообщить(Узел.ПоследнийДочерний);
    Сообщить(Узел.ПредыдущийСоседний);
    Сообщить(Узел.СледующийСоседний);
    Сообщить(Узел.ДочерниеУзлы.Количество() = 0);
    Сообщить(Не Узел.ЕстьДочерниеУзлы());
    Сообщить(Узел.Атрибуты = Неопределено);
    Сообщить(Не Узел.ЕстьАтрибуты());
КонецЦикла;
Сообщить(Ссылка.ИмяУзла = "guideProduct");
Сообщить(ОписаниеТипа.РодительскийУзел = Документ);
Сообщить(Ссылка.РодительскийУзел = Корень);
Сообщить(Пространство.ИмяУзла = "#namespace");
Сообщить(Пространство.Префикс = "g");
Сообщить(Пространство.ЛокальноеИмя = "g");
Сообщить(Пространство.ЗначениеУзла = "urn:guide:special");
Сообщить(Пространство.URIПространстваИмен = "urn:guide:special");
Сообщить(Пространство.ЭлементВладелец.УзелИдентичен(Корень));

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

  1. Описание типа получает документ-владелец при создании ДокументDOM; это отдельный ребёнок документа, не корня products.

  2. Ссылка guideProduct находится в корне, но у неё нет содержимого, потому что такого объявления сущности нет.

  3. Специализированный namespace получаем осью namespace::g. Его имя #namespace, префикс/локальное имя g, значение и URI совпадают.

  4. Пустые связи и строковые свойства выводим диагностически: не вызываем методы у Неопределено. Атрибуты проверяем до Количество.

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

  1. По четыре логических проверки в каждой из трёх итераций дают Истина; девять финальных сравнений дают Истина.

  2. Показаны разные родители DOCTYPE и ссылки; у namespace отдельно проверен ЭлементВладелец, это не строка xmlns.

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

Разобраны настоящие значения специальных узлов без внешнего XML или DTD.

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

  1. БазовыйURI — не адрес товара; пустой URI у узла не равен отсутствию объявленного namespace в окружающем дереве.

  2. Непустая СсылкаНаСущностьDOM не доказывает существование СущностьDOM: создание ссылки само не создаёт объявление.

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

Проверить пользовательскую аннотацию namespace без изменения XML

Пробуем прикрепить свою заметку и явно различаем успех и readonly-отказ. Ни одна ветка не приравнивается к изменению URI объявления.

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

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

Подготовка

  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";
КонецЕсли;
Узлы = Новый Массив;
Узлы.Добавить(ОписаниеТипа);
Узлы.Добавить(Ссылка);
Узлы.Добавить(Пространство);
До = Пространство.ПолучитьПользовательскиеДанные("guideCode");
Сообщить(До = Неопределено);
Установлено = Ложь;
Попытка
    Пространство.УстановитьПользовательскиеДанные("guideCode", "A-01");
    Установлено = Истина;
Исключение
    Сообщить("Аннотация namespace отклонена: " + ОписаниеОшибки());
КонецПопытки;
Если Установлено Тогда
    Сообщить(Пространство.ПолучитьПользовательскиеДанные("guideCode") = "A-01");
Иначе
    Сообщить(Пространство.ПолучитьПользовательскиеДанные("guideCode") = До);
КонецЕсли;
Сообщить(Пространство.URIПространстваИмен = "urn:guide:special");
Сообщить(Пространство.ЭлементВладелец.УзелИдентичен(Корень));

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

  1. Читаем отсутствующий собственный ключ до установки.

  2. Отдельный флаг Установлено меняется только после завершения вызова. Пойманная ошибка не делает его Истина.

  3. Ветку результата проверяем против фактического исхода; URI и элемент-владелец должны остаться прежними.

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

  1. Первое сравнение Истина; в ветке результата сравнение Истина при согласованном исходе вызова.

  2. Два последних сравнения Истина. Если установка запрещена, выводится реальная ошибка, а не ложное сообщение об успехе.

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

Отделена временная аннотация объекта от редактирования namespace и показана ветка отказа.

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

  1. Для переносимых служебных заметок используйте собственное Соответствие рядом с результатом XPath.

  2. Справка запрещает изменение namespace, но не уточняет этот частный механизм пользовательских данных: успех установки здесь не обещан.

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

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

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

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

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