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