Создает экземпляр объекта ПараметрыЧтенияXML.
Синтаксис
Новый ПараметрыЧтенияXML(<Версия>, <Язык>, <ПробельныеСимволы>, <ТипПроверкиПравильности>, <ИгнорироватьОбъявлениеXML>, <ИгнорироватьТипДокумента>, <ИгнорироватьИнструкцииОбработки>, <ИгнорироватьКомментарии>, <ИгнорироватьПробельныеСимволы>, <СекцииCDATAКакТекст>, <ИспользоватьИгнорируемыеПробельныеСимволы>)Полное описание, параметры и ограничения
ПараметрыЧтенияXML.На основе набора параметров
ПараметрыЧтенияXML (XMLReaderSettings)
На основе набора параметров
Доступен, начиная с версии 8.1.
Синтаксис:
Новый ПараметрыЧтенияXML(<Версия>, <Язык>, <ПробельныеСимволы>, <ТипПроверкиПравильности>, <ИгнорироватьОбъявлениеXML>, <ИгнорироватьТипДокумента>, <ИгнорироватьИнструкцииОбработки>, <ИгнорироватьКомментарии>, <ИгнорироватьПробельныеСимволы>, <СекцииCDATAКакТекст>, <ИспользоватьИгнорируемыеПробельныеСимволы>)
Параметры:
<Версия> (необязательный)
Тип: Строка.
Версия спецификации XML, используемой при чтении.
Может принимать значения: "1.0" или "1.1".
Значение по умолчанию: 1.0.
<Язык> (необязательный)
Тип: Строка.
Язык документа XML - начальное значение атрибута xml:lang для документа XML.
Значение данного свойства является начальным значением свойства Язык объекта ПараметрыЧтенияXML.
<ПробельныеСимволы> (необязательный)
Тип: ПробельныеСимволыXML.
Значение по умолчанию атрибута xml:space, используемое при чтении XML.
Влияет на свойство ПробельныеСимволы объекта ПараметрыЧтенияXML.
Значение по умолчанию: ПоУмолчанию.
<ТипПроверкиПравильности> (необязательный)
Тип: ТипПроверкиXML.
Тип проверки данных XML на правильность при чтении.
Значение по умолчанию: НетПроверки.
<ИгнорироватьОбъявлениеXML> (необязательный)
Тип: Булево.
Признак игнорирования объявления XML при чтении.
Значение по умолчанию: Истина.
<ИгнорироватьТипДокумента> (необязательный)
Тип: Булево.
Признак игнорирования определения типа документа (DTD).
Значение по умолчанию: Истина.
<ИгнорироватьИнструкцииОбработки> (необязательный)
Тип: Булево.
Признак игнорирования инструкций обработки.
Значение по умолчанию: Ложь.
<ИгнорироватьКомментарии> (необязательный)
Тип: Булево.
Признак игнорирования комментариев.
Значение по умолчанию: Ложь.
<ИгнорироватьПробельныеСимволы> (необязательный)
Тип: Булево.
Признак игнорирования пробельных символов при чтении.
Значение по умолчанию: Истина.
<СекцииCDATAКакТекст> (необязательный)
Тип: Булево.
Признак интерпретации секций CDATA как текста при чтении.
Значение по умолчанию: Ложь.
<ИспользоватьИгнорируемыеПробельныеСимволы> (необязательный)
Тип: Булево.
Определяет использование узлов ПробельныеСимволы при чтении XML.
Значение по умолчанию: Ложь.
Описание:
Создает экземпляр объекта ПараметрыЧтенияXML.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Клонировать объявление и отделить равенство от идентичности
Своя служебная пометка связана с узлом, не с XML-текстом. Копия похожа по структуре, но не является тем же объектом и не наследует пользовательские данные.
Где и как запускать
Полный серверный общий модуль своей учебной базы. Внутренний DTD только известной собственной строки, не вход произвольного API.
Подготовка
Только отдельная учебная база. Создайте серверный общий модуль УчебныеЗадачи с процедурой ВыполнитьПример() Экспорт. Полный модуль каждого урока вставьте целиком, включая уже показанную процедуру.
XML содержит только собственный внутренний DTD. Внешнего подмножества DOCTYPE нет, SYSTEM/PUBLIC в двух объявлениях — учебные URN, не пути и не HTTP-адреса.
guideIcon — неразбираемая сущность NDATA; она объявлена, но не используется как &guideIcon; в тексте. Её ресурс не загружается. Нотация описывает формат, не изображение.
Параметры и построитель создаются заново для этой известной строки. Никогда не переносите разрешение DTD на произвольный XML из интернета или API.
Вызовите УчебныеЗадачи.ВыполнитьПример() из серверной учебной команды. Нет записи базы, файлов или сетевых соединений; поведение DOM 1С ещё требует контрольного запуска в учебной базе.
Процедура ВыполнитьПример() Экспорт
Параметры = Новый ПараметрыЧтенияXML(, , , , , Ложь);
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку("<?xml version=""1.0""?>
|<!DOCTYPE products [
|<!NOTATION guideMark PUBLIC ""guide-marker"" ""urn:guide:marker-format"">
|<!ENTITY guideIcon SYSTEM ""urn:guide:marker-payload"" NDATA guideMark>
|]>
|<products xmlns:g=""urn:guide:dtd""><product>Книга</product></products>", Параметры);
Построитель = Новый ПостроительDOM;
Настройки = Построитель.КонфигурацияDOM;
Если НЕ Настройки.ВозможноУстановитьПараметр("disallow-doctype", Ложь) Тогда
Чтение.Закрыть();
ВызватьИсключение "Построитель не разрешает собственный внутренний DTD";
КонецЕсли;
Настройки.УстановитьПараметр("disallow-doctype", Ложь);
Попытка
Документ = Построитель.Прочитать(Чтение);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
ОписаниеТипа = Документ.ОпределениеТипаДокумента;
Если ОписаниеТипа = Неопределено Тогда
ВызватьИсключение "Включите чтение типа документа, не подменяйте его пустым новым DOCTYPE";
КонецЕсли;
Сущность = ОписаниеТипа.Сущности.ПолучитьИменованныйЭлемент("guideIcon");
Нотация = ОписаниеТипа.Нотации.ПолучитьИменованныйЭлемент("guideMark");
Если ТипЗнч(Сущность) <> Тип("СущностьDOM") ИЛИ ТипЗнч(Нотация) <> Тип("НотацияDOM") Тогда
ВызватьИсключение "Построитель не сохранил ожидаемые собственные объявления DTD";
КонецЕсли;
Узлы = Новый Массив;
Узлы.Добавить(Сущность);
Узлы.Добавить(Нотация);
Для Каждого Узел Из Узлы Цикл
Прежнее = Узел.УстановитьПользовательскиеДанные("guide-task", "Учебная проверка");
Сообщить(Прежнее = Неопределено);
Сообщить(Узел.ПолучитьПользовательскиеДанные("guide-task") = "Учебная проверка");
Копия = Узел.КлонироватьУзел(Истина);
Сообщить(Узел.УзелИдентичен(Узел));
Сообщить(НЕ Узел.УзелИдентичен(Копия));
Сообщить(Узел.УзелРавен(Копия));
Сообщить(Копия.ПолучитьПользовательскиеДанные("guide-task") = Неопределено);
Сообщить(Копия.РодительскийУзел = Неопределено);
Положение = Узел.СравнитьПозициюВДокументе(Копия);
Сообщить("Положение отдельной копии: " + Строка(Положение));
Копия.Нормализовать();
Сообщить(Копия.ДочерниеУзлы.Количество() = 0);
Снятое = Узел.УстановитьПользовательскиеДанные("guide-task", Неопределено);
Сообщить(Снятое = "Учебная проверка");
Сообщить(Узел.ПолучитьПользовательскиеДанные("guide-task") = Неопределено);
КонецЦикла;
КонецПроцедурыРазбор по шагам
УстановитьПользовательскиеДанные возвращает прежнее значение. Первый вызов связывает свою пометку с реально полученным узлом.
КлонироватьУзел(Истина) создаёт отдельный узел. По локальной справке у копии не определены родитель и пользовательские данные.
УзелИдентичен сравнивает идентичность, УзелРавен структуру. Оба сравнения проверяются и не подменяют друг друга.
СравнитьПозициюВДокументе только диагностируется: отдельная копия не имеет гарантированного порядка до/после в дереве.
Нормализовать у листа не создаёт детей или загружает содержимое SYSTEM. В конце собственная пометка снимается передачей Неопределено, прежняя строка проверяется.
Как проверить результат
По десять Истина для каждого узла и диагностическое положение копии.
Копии не помещаются в корень или коллекции DTD, исходные объявления не удаляются.
Ожидаемый результат
Различие структуры, идентичности и служебных данных показано на настоящем объявлении.
На что обратить внимание
Пользовательская пометка — не атрибут XML и не постоянная запись.
Положение отдельной копии не используйте как индекс коллекции объявлений.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Проверить ограничения дочерних операций у объявлений DTD
Один свой элемент-кандидат не является ребёнком сущности или нотации. Четыре недопустимых операции должны завершиться отказами, а основной XML остаться прежним.
Где и как запускать
Полный серверный общий модуль своей учебной базы. Внутренний DTD только известной собственной строки, не вход произвольного API.
Подготовка
Только отдельная учебная база. Создайте серверный общий модуль УчебныеЗадачи с процедурой ВыполнитьПример() Экспорт. Полный модуль каждого урока вставьте целиком, включая уже показанную процедуру.
XML содержит только собственный внутренний DTD. Внешнего подмножества DOCTYPE нет, SYSTEM/PUBLIC в двух объявлениях — учебные URN, не пути и не HTTP-адреса.
guideIcon — неразбираемая сущность NDATA; она объявлена, но не используется как &guideIcon; в тексте. Её ресурс не загружается. Нотация описывает формат, не изображение.
Параметры и построитель создаются заново для этой известной строки. Никогда не переносите разрешение DTD на произвольный XML из интернета или API.
Вызовите УчебныеЗадачи.ВыполнитьПример() из серверной учебной команды. Нет записи базы, файлов или сетевых соединений; поведение DOM 1С ещё требует контрольного запуска в учебной базе.
Процедура ВыполнитьПример() Экспорт
Параметры = Новый ПараметрыЧтенияXML(, , , , , Ложь);
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку("<?xml version=""1.0""?>
|<!DOCTYPE products [
|<!NOTATION guideMark PUBLIC ""guide-marker"" ""urn:guide:marker-format"">
|<!ENTITY guideIcon SYSTEM ""urn:guide:marker-payload"" NDATA guideMark>
|]>
|<products xmlns:g=""urn:guide:dtd""><product>Книга</product></products>", Параметры);
Построитель = Новый ПостроительDOM;
Настройки = Построитель.КонфигурацияDOM;
Если НЕ Настройки.ВозможноУстановитьПараметр("disallow-doctype", Ложь) Тогда
Чтение.Закрыть();
ВызватьИсключение "Построитель не разрешает собственный внутренний DTD";
КонецЕсли;
Настройки.УстановитьПараметр("disallow-doctype", Ложь);
Попытка
Документ = Построитель.Прочитать(Чтение);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
ОписаниеТипа = Документ.ОпределениеТипаДокумента;
Если ОписаниеТипа = Неопределено Тогда
ВызватьИсключение "Включите чтение типа документа, не подменяйте его пустым новым DOCTYPE";
КонецЕсли;
Сущность = ОписаниеТипа.Сущности.ПолучитьИменованныйЭлемент("guideIcon");
Нотация = ОписаниеТипа.Нотации.ПолучитьИменованныйЭлемент("guideMark");
Если ТипЗнч(Сущность) <> Тип("СущностьDOM") ИЛИ ТипЗнч(Нотация) <> Тип("НотацияDOM") Тогда
ВызватьИсключение "Построитель не сохранил ожидаемые собственные объявления DTD";
КонецЕсли;
Узлы = Новый Массив;
Узлы.Добавить(Сущность);
Узлы.Добавить(Нотация);
Отказов = 0;
Для Каждого Узел Из Узлы Цикл
Кандидат = Документ.СоздатьЭлемент("ownChild");
Попытка
Узел.ДобавитьДочерний(Кандидат);
Исключение
Отказов = Отказов + 1;
Сообщить("Ожидаемое ограничение узла DTD: " + ОписаниеОшибки());
КонецПопытки;
Попытка
Узел.ВставитьПеред(Кандидат, Кандидат);
Исключение
Отказов = Отказов + 1;
Сообщить("Ожидаемое ограничение узла DTD: " + ОписаниеОшибки());
КонецПопытки;
Попытка
Узел.ЗаменитьДочерний(Кандидат, Кандидат);
Исключение
Отказов = Отказов + 1;
Сообщить("Ожидаемое ограничение узла DTD: " + ОписаниеОшибки());
КонецПопытки;
Попытка
Узел.УдалитьДочерний(Кандидат);
Исключение
Отказов = Отказов + 1;
Сообщить("Ожидаемое ограничение узла DTD: " + ОписаниеОшибки());
КонецПопытки;
Сообщить(Узел.ДочерниеУзлы.Количество() = 0);
Сообщить(Кандидат.РодительскийУзел = Неопределено);
КонецЦикла;
Если Отказов <> 8 Тогда
ВызватьИсключение "Ожидалось восемь отказов: объявление DTD не обычный контейнер элементов";
КонецЕсли;
Сообщить(Отказов = 8);
Сообщить(Документ.ЭлементДокумента.ТекстовоеСодержимое = "Книга");
КонецПроцедурыРазбор по шагам
Кандидат создаётся тем же документом и остаётся вне дерева. Он не связан с рабочими данными.
ДобавитьДочерний проверяет ограничение контейнера; ВставитьПеред/ЗаменитьДочерний/УдалитьДочерний также получают узел, который не является ребёнком объявления.
Исключения ожидаются, но точный вид ошибки не объявляется универсальным: ограничение readonly, иерархии и отсутствие ребёнка — разные возможные причины отказа.
Каждый отказ увеличивает счётчик. Контрольное исключение при неправильном количестве находится вне блоков, которые ловят ожидаемые ошибки.
Проверяются отсутствие детей у двух объявлений, отсутствие родителя у кандидата и неизменность текста Книга.
Как проверить результат
Восемь диагностических сообщений об ожидаемых ограничениях и шесть Истина.
Если операция неожиданно прошла, урок не сообщает успех: итоговая проверка остановит его.
Ожидаемый результат
Недопустимые операции не замаскированы под успешно изменённый XML.
На что обратить внимание
Это отрицательный учебный сценарий: нельзя копировать ожидание исключений в обычную бизнес-обработку как нормальный результат.
Отказ ВставитьПеред с отсутствующим ребёнком сам по себе не доказывает общий режим readonly.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.