Показан полный собственный источник, фактический потребитель параметра и аккуратное закрытие читателя.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Тело серверной процедуры собственной обработки / общего модуля. Источники заданы в коде, рабочие данные не читаются.
Функцию разбора разместите отдельно. Только для этой фиксированной собственной строки разрешается DOCTYPE; не переносите такие параметры на XML из интернета.
Сущность guideCode содержит строку BOOK-001, нотация guideMark — только публичное обозначение собственного формата. Внешнего подмножества, SYSTEM-адреса и раскрытия ресурсов нет.
Документ = СвоиОбъявленияDOM();
Объявление = Документ.ОпределениеТипаДокумента.Нотации.ПолучитьИменованныйЭлемент("guideMark");
Если Объявление = Неопределено Тогда
ВызватьИсключение "Собственное объявление DTD отсутствует";
КонецЕсли;
Сообщить("Имя объявления: " + Объявление.ИмяУзла);
Сообщить("Тип Нотация: " + Строка(Объявление.ТипУзла = ТипУзлаDOM.Нотация));
Сообщить("Это объявление DTD, не тег book и не ссылка на сущность");Тот же модуль: собственный внутренний DTD без внешних ресурсов
Функция СвоиОбъявленияDOM()
ТекстXML = "<!DOCTYPE books [<!NOTATION guideMark PUBLIC ""guide-marker""><!ENTITY guideCode ""BOOK-001"">]><books><book>Книга</book></books>";
Параметры = Новый ПараметрыЧтенияXML(, , , , , Ложь);
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(ТекстXML, Параметры);
Построитель = Новый ПостроительDOM;
Построитель.КонфигурацияDOM.УстановитьПараметр("disallow-doctype", Ложь);
Попытка
Документ = Построитель.Прочитать(Чтение);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Если Документ.ОпределениеТипаДокумента = Неопределено Тогда
ВызватьИсключение "Собственный DTD не сохранён построителем";
КонецЕсли;
Возврат Документ;
КонецФункцииРазбор по шагам
Подготовьте фиксированный собственный источник.
Выполните основной блок и необходимые дополнительные функции.
Сравните результат с описанным контрольным случаем.
Как проверить результат
Объявление получается из специальной коллекции самого DOCTYPE, не из дочерних элементов books. ТипУзла readonly. Если построитель не сохраняет собственный DTD, опыт завершается явной ошибкой, а не подменяет его пустой коллекцией.
BSL и XML / XSD / DOM 1С при сборке HTML не выполнялись; данные, файлы и сеть не изменяются.
Ожидаемый результат
Режим имеет конкретную роль в чтении / записи собственного XML, а не только подпись перечисления.
На что обратить внимание
ПараметрыЧтенияXML задаются конструктором: многие его свойства только для чтения и не должны присваиваться после создания.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.