Считывает очередной атрибут элемента XML. После прочтения с помощью метода ЧтениеFastInfoset.Прочитать очередного узла, имеющего тип НачалоЭлемента, можно получить доступ к атрибутам данного элемента. Каждый вызов данного метода позволяет прочитать очередной атрибут. После прочтения очередного атрибута свойствам ЧтениеFastInfoset.ТипУзла, ЧтениеFastInfoset.Имя, ЧтениеFastInfoset.ЛокальноеИмя, ЧтениеFastInfoset.Префикс, ЧтениеFastInfoset.URIПространстваИмен и ЧтениеFastInfoset.Значение присваиваются значения в соответствии с прочитанным атрибутом.
Синтаксис
ПрочитатьАтрибут()Примеры платформы
Чтение.ОткрытьФайл("c:/docs/data.xml");
Пока Чтение.Прочитать() Цикл
Если Чтение.КоличествоАтрибутов() > 0 Тогда
Пока Чтение.ПрочитатьАтрибут() Цикл
КонецЦикла
КонецЕсли
КонецЦиклаПолное описание, параметры и ограничения
ЧтениеFastInfoset.ПрочитатьАтрибут (FastInfosetReader.ReadAttribute)
ЧтениеFastInfoset (FastInfosetReader)
ПрочитатьАтрибут (ReadAttribute)
Доступен, начиная с версии 8.1.
Синтаксис:
ПрочитатьАтрибут()
Возвращаемое значение:
Тип: Булево.
Истина - очередной атрибут прочитан; Ложь - атрибутов больше нет.
Описание:
Считывает очередной атрибут элемента XML. После прочтения с помощью метода ЧтениеFastInfoset.Прочитать очередного узла, имеющего тип НачалоЭлемента, можно получить доступ к атрибутам данного элемента. Каждый вызов данного метода позволяет прочитать очередной атрибут. После прочтения очередного атрибута свойствам ЧтениеFastInfoset.ТипУзла, ЧтениеFastInfoset.Имя, ЧтениеFastInfoset.ЛокальноеИмя, ЧтениеFastInfoset.Префикс, ЧтениеFastInfoset.URIПространстваИмен и ЧтениеFastInfoset.Значение присваиваются значения в соответствии с прочитанным атрибутом.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Чтение.ОткрытьФайл("c:/docs/data.xml");
Пока Чтение.Прочитать() Цикл
Если Чтение.КоличествоАтрибутов() > 0 Тогда
Пока Чтение.ПрочитатьАтрибут() Цикл
// Обработка атрибута
КонецЦикла
КонецЕсли
КонецЦикла
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Записать значение атрибута частями и прочитать ПрочитатьАтрибут
Атрибут label содержит Книга A&B. Запись его начала и конца отделена от элементов; амперсанд передаётся текстом, а не конкатенацией XML-разметки.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Учебная база на платформе 8.5.1.1343. Создайте серверный общий модуль УчебныеЗадачи и процедуру ВыполнитьПример() Экспорт; код урока без директив вставляйте в её тело. Каждый урок запускайте отдельно.
Все документы создаются из собственных строк и чисел в памяти. Не подставляйте файл XML, бинарный архив обмена, ссылки или данные рабочей базы вместо учебных значений.
Fast Infoset — двоичное представление XML. Для чтения нужен соответствующий reader, а не преобразование байтов в UTF-8-строку. Это не формат API Avito и не автоматическое сжатие произвольного JSON.
Запуск в 1С ещё не подтверждён; выполните контрольные проверки в учебной базе. Не сравнивайте точные байты двух кодировщиков: в заданиях проверяется восстановленная структура и значения.
Запись = Новый ЗаписьFastInfoset;
Запись.УстановитьДвоичныеДанные();
Попытка
Запись.ЗаписатьНачалоЭлемента("product");
Запись.ЗаписатьНачалоАтрибута("label");
Запись.ЗаписатьТекст("Книга ");
Запись.ЗаписатьТекст("A&B");
Запись.ЗаписатьКонецАтрибута();
Запись.ЗаписатьТекст("Учебный товар");
Запись.ЗаписатьКонецЭлемента();
Данные = Запись.Закрыть();
Исключение
Запись.Закрыть();
ВызватьИсключение;
КонецПопытки;
Если ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
ВызватьИсключение "Не получены собственные Fast Infoset-данные";
КонецЕсли;
Сообщить(Данные.Размер() > 0);
Чтение = Новый ЧтениеFastInfoset;
Чтение.УстановитьДвоичныеДанные(Данные);
Попытка
НайденКорень = Ложь;
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
НайденКорень = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не НайденКорень Тогда
ВызватьИсключение "Не найден собственный корневой элемент";
КонецЕсли;
Подпись = "";
Атрибутов = 0;
Пока Чтение.ПрочитатьАтрибут() Цикл
Атрибутов = Атрибутов + 1;
Если Чтение.ЛокальноеИмя = "label" Тогда
Подпись = Чтение.Значение;
КонецЕсли;
КонецЦикла;
Сообщить(Атрибутов = 1);
Сообщить(Подпись = "Книга A&B");
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Разбор по шагам
ЗаписатьНачалоАтрибута вызывается на незавершённом начале элемента до текстового содержимого.
Два вызова ЗаписатьТекст внутри атрибута образуют одну строку label.
ЗаписатьКонецАтрибута завершает атрибут; следующий текст уже относится к элементу.
ПрочитатьАтрибут возвращает очередной атрибут и меняет текущие свойства reader.
Как проверить результат
Три проверки Истина: непустые байты, один атрибут и восстановленная подпись Книга A&B.
Строка ampersand не превратилась в потерянный разделитель и не требует ручного чтения &.
Ожидаемый результат
Реальный текст восстановлен после поэтапной записи атрибута.
На что обратить внимание
Каждому началу атрибута обязателен конец; нельзя начать дочерний элемент, пока атрибут открыт.
Не заменяйте безопасную запись текста сборкой внешней XML-разметки.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.