Создаём products с двумя product и исследуем реальные связи. Показываем, что владелец документа и родительский узел — не одно и то же.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.
Сначала оставьте учебные имена и значения неизменёнными. После контрольного запуска меняйте по одному условию.
Документ = Новый ДокументDOM("", "products");
Корень = Документ.ЭлементДокумента;
Для Номер = 1 По 2 Цикл
Товар = Документ.СоздатьЭлемент("product");
Товар.УстановитьАтрибут("code", ?(Номер = 1, "A-01", "B-02"));
Товар.ДобавитьДочерний(Документ.СоздатьТекстовыйУзел(?(Номер = 1, "Книга", "Ручка")));
Корень.ДобавитьДочерний(Товар);
КонецЦикла;
Первый = Корень.ПервыйДочерний;
Последний = Корень.ПоследнийДочерний;
Сообщить(Первый.ИмяУзла);
Сообщить(Первый.ИмяЭлемента);
Сообщить(Первый.ЛокальноеИмя);
Сообщить(Первый.Префикс);
Сообщить(Первый.URIПространстваИмен);
Сообщить(Первый.ТипУзла);
Сообщить(Первый.ТекстовоеСодержимое);
Сообщить(Первый.ДокументВладелец = Документ);
Сообщить(Первый.РодительскийУзел = Корень);
Сообщить(Первый.ПредыдущийСоседний = Неопределено);
Сообщить(Первый.СледующийСоседний = Последний);
Сообщить(Последний.ПредыдущийСоседний = Первый);
Сообщить(Последний.СледующийСоседний = Неопределено);
Сообщить(Корень.ДочерниеУзлы.Количество() = 2);
Сообщить(Корень.ДочерниеУзлы.Элемент(0) = Первый);
Если Первый.ЕстьАтрибуты() Тогда
Сообщить(Первый.Атрибуты.Количество());
КонецЕсли;
Сообщить(Первый.ЕстьДочерниеУзлы());
Сообщить(Первый.ПервыйДочерний = Первый.ПоследнийДочерний);Разбор по шагам
ЭлементДокумента — корневой элемент, а ПервыйДочерний/ПоследнийДочерний относятся к его непосредственным детям.
У первого product владелец — весь ДокументDOM, родитель — products. Это два разных объекта.
На краях списка соседей возвращается Неопределено; не обращаемся к его ИмяУзла.
product содержит атрибут code и один текстовый дочерний узел. Атрибуты находятся в отдельной коллекции, не в ДочерниеУзлы.
Как проверить результат
У первого узла имена product, текст Книга; число атрибутов равно 1.
Все контрольные сравнения связей дают Истина; у корня ровно два дочерних узла.
У product первый и последний ребёнок совпадают, поскольку текстовый ребёнок один.
Ожидаемый результат
Разобрана структура одного настоящего DOM-дерева с проверкой соседей, родителя и владельца.
На что обратить внимание
При чтении красиво оформленного XML между элементами могут появиться пробельные текстовые узлы. ПервыйДочерний не всегда является товаром.
Атрибут code не является отдельным дочерним элементом product.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.