ЧтениеFastInfoset.ИмеетИмя

Свойства · HasName

Тип: Булево. Признак наличия у текущего узла имени. Истина - для узла определено имя, Ложь - в противном случае.

Полное описание, параметры и ограничения

ЧтениеFastInfoset.ИмеетИмя (FastInfosetReader.HasName)

ЧтениеFastInfoset (FastInfosetReader)

ИмеетИмя (HasName)

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

Использование:
Только чтение.
Описание:
Тип: Булево.
Признак наличия у текущего узла имени.
Истина - для узла определено имя, Ложь - в противном случае.
Доступность:

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

Использование в версии:

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

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

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

Пройти атрибуты отдельным курсором и проверить code/quantity

ПервыйАтрибут и СледующийАтрибут меняют текущий узел reader. После перехода Имя и Значение относятся уже к атрибуту, а не к элементу товара.

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

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

Подготовка

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

  2. Все документы создаются из собственных строк и чисел в памяти. Не подставляйте файл XML, бинарный архив обмена, ссылки или данные рабочей базы вместо учебных значений.

  3. Fast Infoset — двоичное представление XML. Для чтения нужен соответствующий reader, а не преобразование байтов в UTF-8-строку. Это не формат API Avito и не автоматическое сжатие произвольного JSON.

  4. Запуск в 1С ещё не подтверждён; выполните контрольные проверки в учебной базе. Не сравнивайте точные байты двух кодировщиков: в заданиях проверяется восстановленная структура и значения.

Запись = Новый ЗаписьFastInfoset;
Запись.УстановитьДвоичныеДанные();
Попытка
    Запись.ЗаписатьНачалоЭлемента("product");
    Запись.ЗаписатьАтрибут("code", "A-01");
    Запись.ЗаписатьАтрибут("quantity", "3");
    Запись.ЗаписатьТекст("Книга");
    Запись.ЗаписатьКонецЭлемента();
    Данные = Запись.Закрыть();
Исключение
    Запись.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Если ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
    ВызватьИсключение "Не получены собственные Fast Infoset-данные";
КонецЕсли;
Сообщить(Данные.Размер() > 0);
Чтение = Новый ЧтениеFastInfoset;
Чтение.УстановитьДвоичныеДанные(Данные);
Попытка
    НайденКорень = Ложь;
    Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            НайденКорень = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если Не НайденКорень Тогда
        ВызватьИсключение "Не найден собственный корневой элемент";
    КонецЕсли;
    Код = "";
    Количество = "";
    ЕстьАтрибут = Чтение.ПервыйАтрибут();
    Пока ЕстьАтрибут Цикл
        Сообщить(Чтение.ТипУзла = ТипУзлаXML.Атрибут);
        Сообщить(Чтение.ИмеетИмя И Чтение.ИмеетЗначение);
        Сообщить(Не Чтение.ЭтоАтрибутПоУмолчанию);
        Если Чтение.Имя = "code" Тогда
            Код = Чтение.Значение;
        ИначеЕсли Чтение.Имя = "quantity" Тогда
            Количество = Чтение.Значение;
        КонецЕсли;
        ЕстьАтрибут = Чтение.СледующийАтрибут();
    КонецЦикла;
    Сообщить(Код = "A-01");
    Сообщить(Количество = "3");
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();

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

  1. Сначала позиционируем reader на корневом НачалоЭлемента.

  2. ПервыйАтрибут возвращает булевый признак успешного перехода; при отсутствии атрибутов цикл не выполняется.

  3. Внутри цикла используем текущее Имя и Значение, а не индексные методы для начала элемента.

  4. ЭтоАтрибутПоУмолчанию здесь Ложь: оба атрибута записаны явно, DTD и XSD не используются.

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

  1. В каждой итерации три проверки Истина: тип атрибута, наличие имени/значения и явное происхождение.

  2. Последние проверки кода A-01 и количества 3 Истина; порядок обхода не используется как условие.

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

Курсорный обход атрибутов отделён от последовательного обхода элементов.

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

  1. После ПервыйАтрибут нельзя считать Чтение.Имя именем товара product.

  2. Атрибут по умолчанию определяется DTD/XSD, не пустым строковым значением.

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

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

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

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

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