Собственный XML: ТипУзлаDOM.Нотация

Учебные задачи

Показан полный собственный источник, фактический потребитель параметра и аккуратное закрытие читателя.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Тело серверной процедуры собственной обработки / общего модуля. Источники заданы в коде, рабочие данные не читаются.

  2. Функцию разбора разместите отдельно. Только для этой фиксированной собственной строки разрешается DOCTYPE; не переносите такие параметры на XML из интернета.

  3. Сущность 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 не сохранён построителем";
    КонецЕсли;
    Возврат Документ;
КонецФункции

Разбор по шагам

  1. Подготовьте фиксированный собственный источник.

  2. Выполните основной блок и необходимые дополнительные функции.

  3. Сравните результат с описанным контрольным случаем.

Как проверить результат

  1. Объявление получается из специальной коллекции самого DOCTYPE, не из дочерних элементов books. ТипУзла readonly. Если построитель не сохраняет собственный DTD, опыт завершается явной ошибкой, а не подменяет его пустой коллекцией.

  2. BSL и XML / XSD / DOM 1С при сборке HTML не выполнялись; данные, файлы и сеть не изменяются.

Ожидаемый результат

Режим имеет конкретную роль в чтении / записи собственного XML, а не только подпись перечисления.

На что обратить внимание

  1. ПараметрыЧтенияXML задаются конструктором: многие его свойства только для чтения и не должны присваиваться после создания.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.