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