Тип: ТипУзлаDOM. Тип узла DOM.
Полное описание, параметры и ограничения
СсылкаНаСущностьDOM.ТипУзла (DOMEntityReference.NodeType)
СсылкаНаСущностьDOM (DOMEntityReference)
ТипУзла (NodeType)
Доступен, начиная с версии 8.1.
Использование:
Только чтение.
Описание:
Тип: ТипУзлаDOM.
Тип узла DOM.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Проверить нормализацию пустых специальных узлов
Нормализовать объединяет соседний текст, но не загружает DTD и не превращает отсутствующее объявление guideProduct в товар. Для readonly namespace возможный отказ показываем явно.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.
Сначала оставьте учебные имена и значения неизменёнными. После контрольного запуска меняйте по одному условию.
DOCTYPE создан собственным конструктором с пустыми PUBLIC/SYSTEM. Внутренних сущностей/нотаций нет; guideProduct — намеренно неопределённая ссылка, а не загруженный товар.
Этот документ исследуется только в памяти. Не сохраняйте и не передавайте его как готовый XML обмена: ссылка guideProduct не объявлена.
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);
КонецЦикла;
Сообщить(ОписаниеТипа.Сущности.Количество() = 0);
Сообщить(Пространство.URIПространстваИмен = "urn:guide:special");Разбор по шагам
Вызов выполняется на каждом реально полученном узле, не на строке или Неопределено.
Readonly-ограничение не скрываем: сообщение завершения и сообщение отказа означают разные результаты.
При любом допустимом исходе данного вызова проверяем, что дети не появились и пространство осталось прежним.
Как проверить результат
Три проверки пустых детей дают Истина; фиксируйте отдельно, какие вызовы завершились и какие были отклонены.
Две финальные проверки Истина: объявления сущностей отсутствуют, URI не изменён.
Ожидаемый результат
Показаны пределы нормализации специальных узлов, без обещания загрузки содержимого.
На что обратить внимание
Не используйте перехват исключения как сигнал успешно выполненной нормализации.
Этот урок намеренно не обещает одинаковое завершение Нормализовать у всех readonly-видов.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Сравнить положение специальных узлов, не считать его равенством
СравнитьПозициюВДокументе отвечает о расположении относительно другого узла. Для namespace точный порядок не обещаем: выводим фактическое значение отдельно от идентичности.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.
Сначала оставьте учебные имена и значения неизменёнными. После контрольного запуска меняйте по одному условию.
DOCTYPE создан собственным конструктором с пустыми PUBLIC/SYSTEM. Внутренних сущностей/нотаций нет; guideProduct — намеренно неопределённая ссылка, а не загруженный товар.
Этот документ исследуется только в памяти. Не сохраняйте и не передавайте его как готовый XML обмена: ссылка guideProduct не объявлена.
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";
КонецЕсли;
Узлы = Новый Массив;
Узлы.Добавить(ОписаниеТипа);
Узлы.Добавить(Ссылка);
Узлы.Добавить(Пространство);
Для Каждого Узел Из Узлы Цикл
Сообщить(Узел.ТипУзла);
Сообщить(Узел.СравнитьПозициюВДокументе(Корень));
Сообщить(Не Узел.УзелИдентичен(Корень));
Сообщить(Не Узел.УзелРавен(Корень));
КонецЦикла;
Сообщить(ОписаниеТипа.РодительскийУзел = Документ);
Сообщить(Ссылка.РодительскийУзел = Корень);Разбор по шагам
У трёх специальных узлов разные роли и разные связи с корнем.
Позицию выводим как значение платформы, не превращаем в индекс массива или число строк товара.
Равенство и идентичность проверяем отдельными вызовами; положение не заменяет эти сравнения.
Как проверить результат
По два сравнения в трёх итерациях дают Истина: ни один специальный узел не является корнем и не равен ему.
Два последних сравнения Истина, конкретное значение позиции namespace фиксируется диагностически.
Ожидаемый результат
Разделены положение в документе, равенство содержания и идентичность объектов.
На что обратить внимание
Не сортируйте товарные строки по диагностическому порядку объявлений namespace.
Для разных/отсоединённых деревьев позиция может иметь другое значение и зависеть от реализации.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.