СериализаторXDTO.ВозможностьЧтенияXML

Методы · CanReadXML

Производит проверку возможности чтения из объекта ЧтениеXML значения. Данный метод получает тип данных XML из объекта ЧтениеXML аналогично методу ПолучитьXMLТип, а затем пытается определить, имеется ли соответствующий тип 1С:Предприятия аналогично тому, как это делает метод ИзXMLТипа.

Синтаксис

ВозможностьЧтенияXML(<ЧтениеXML>)
Полное описание, параметры и ограничения

СериализаторXDTO.ВозможностьЧтенияXML (XDTOSerializer.CanReadXML)

СериализаторXDTO (XDTOSerializer)

ВозможностьЧтенияXML (CanReadXML)

Доступен, начиная с версии 8.1.

Синтаксис:
ВозможностьЧтенияXML(<ЧтениеXML>)
Параметры:

<ЧтениеXML> (обязательный)
Тип: ЧтениеУзловDOM, ЧтениеFastInfoset, ЧтениеXML.
Объект, через который производится чтение XML.
Возвращаемое значение:
Тип: Булево.
Истина - тип 1С:Предприятия существует; Ложь - в противном случае.
Описание:

Производит проверку возможности чтения из объекта ЧтениеXML значения.
Данный метод получает тип данных XML из объекта ЧтениеXML аналогично методу ПолучитьXMLТип, а затем пытается определить, имеется ли соответствующий тип 1С:Предприятия аналогично тому, как это делает метод ИзXMLТипа.

Доступность:

Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.

Примечание:
Метод не производит чтения. Он определяет возможность чтения указанного типа в текущем положении объекта чтения.
Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Проверить XML-тип в текущей позиции до чтения числа

ЧтениеXML — курсор. Сначала находим начало элемента, затем проверяем возможность сопоставления типа и только потом читаем значение.

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

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

Подготовка

  1. Используется собственный XML числа 42, созданный с явным назначением типа.

  2. Не добавляйте лишний Прочитать между диагностикой начала элемента и ПрочитатьXML: это может сдвинуть курсор внутрь значения.


Сериализатор = Новый СериализаторXDTO;
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
    Сериализатор.ЗаписатьXML(Запись, 42, НазначениеТипаXML.Явное);
    XML = Запись.Закрыть();
Исключение
    Запись.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(XML);
Попытка
    НайденЭлемент = Ложь;
    Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            НайденЭлемент = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если Не НайденЭлемент Тогда
        ВызватьИсключение "В учебном XML нет элемента значения";
    КонецЕсли;
    ТипXML = Сериализатор.ПолучитьXMLТип(Чтение);
    Если ТипXML = Неопределено Тогда
        ВызватьИсключение "Тип не определяется в текущей позиции";
    КонецЕсли;
    Сообщить(Сериализатор.ВозможностьЧтенияXML(Чтение));
    Сообщить(Сериализатор.ИзXMLТипа(ТипXML) = Тип("Число"));
    Значение = Сериализатор.ПрочитатьXML(Чтение, Тип("Число"));
    Чтение.Закрыть();
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Сообщить(Значение = 42);

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

  1. Подготавливаем известное типизированное XML-представление и отдельный объект чтения.

  2. Цикл пропускает декларацию и другие предшествующие узлы, останавливается на НачалоЭлемента.

  3. ПолучитьXMLТип определяет текущий XML-тип. На начальном состоянии метод способен сам выполнить чтение, но здесь курсор уже позиционирован.

  4. ВозможностьЧтенияXML проверяет существование платформенного сопоставления, не гарантирует корректность всех будущих байтов.

  5. ПрочитатьXML проверяет само значение; тип и результат 42 контролируем отдельно.

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

  1. Тип определяется, возможность чтения Истина и XML-тип сопоставляется с Число.

  2. Прочитано число 42.

  3. Если повредить текст числа, проверка типа может ещё пройти, но чтение значения должно отклонить содержимое.

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

Состояние XML-курсора, наличие сопоставления типа и валидность значения проверены тремя отдельными шагами.

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

  1. Проверка возможности чтения не является полной валидацией XML-документа по схеме.

  2. После изменения позиции через Прочитать информацию о прежнем узле нельзя применять к новому.

  3. Для отсутствующего типа или xsi:nil нельзя безусловно обращаться к ИмяТипа.

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

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

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

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

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