ЧтениеУзловDOM.ПрочитатьАтрибут

Методы · ReadAttribute

Считывает очередной атрибут элемента XML. После прочтения с помощью метода ЧтениеУзловDOM.Прочитать очередного узла, имеющего тип НачалоЭлемента, можно получить доступ к атрибутам данного элемента. Каждый вызов данного метода позволяет прочитать очередной атрибут. После прочтения очередного атрибута свойствам ЧтениеУзловDOM.ТипУзла, ЧтениеУзловDOM.Имя, ЧтениеУзловDOM.ЛокальноеИмя, ЧтениеУзловDOM.Префикс, ЧтениеУзловDOM.URIПространстваИмен и ЧтениеУзловDOM.Значение присваиваются значения в соответствии с прочитанным атрибутом.

Синтаксис

ПрочитатьАтрибут()

Примеры платформы

Чтение.ОткрытьФайл("c:/docs/data.xml");
Пока Чтение.Прочитать() Цикл
    Если Чтение.КоличествоАтрибутов() > 0 Тогда
        Пока Чтение.ПрочитатьАтрибут() Цикл
        КонецЦикла
    КонецЕсли
КонецЦикла
Полное описание, параметры и ограничения

ЧтениеУзловDOM.ПрочитатьАтрибут (DOMNodeReader.ReadAttribute)

ЧтениеУзловDOM (DOMNodeReader)

ПрочитатьАтрибут (ReadAttribute)

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

Синтаксис:
ПрочитатьАтрибут()
Возвращаемое значение:
Тип: Булево.
Истина - очередной атрибут прочитан; Ложь - атрибутов больше нет.
Описание:

Считывает очередной атрибут элемента XML. После прочтения с помощью метода ЧтениеУзловDOM.Прочитать очередного узла, имеющего тип НачалоЭлемента, можно получить доступ к атрибутам данного элемента. Каждый вызов данного метода позволяет прочитать очередной атрибут. После прочтения очередного атрибута свойствам ЧтениеУзловDOM.ТипУзла, ЧтениеУзловDOM.Имя, ЧтениеУзловDOM.ЛокальноеИмя, ЧтениеУзловDOM.Префикс, ЧтениеУзловDOM.URIПространстваИмен и ЧтениеУзловDOM.Значение присваиваются значения в соответствии с прочитанным атрибутом.

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

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

Пример:

Чтение.ОткрытьФайл("c:/docs/data.xml");
Пока Чтение.Прочитать() Цикл
Если Чтение.КоличествоАтрибутов() > 0 Тогда
Пока Чтение.ПрочитатьАтрибут() Цикл
// Обработка атрибута

КонецЦикла
КонецЕсли
КонецЦикла

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

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

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

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

Обойти атрибуты с перемещением курсора и продолжить чтение текста

ПервыйАтрибут/СледующийАтрибут и ПрочитатьАтрибут — два способа последовательного обхода. Каждый демонстрируется на новом открытии, чтобы не смешивать состояния.

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

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

Подготовка

  1. Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.

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

  3. В этом блоке каждый пример создаёт собственное дерево DOM в памяти. Файлы, сеть, данные документов и справочников не используются.

  4. Открыть у ЧтениеУзловDOM принимает узел, а у ЗаписьУзловDOM — документ-владелец будущих узлов. Это не открытие файла.

URI = "urn:guide:products";
URIЕдиниц = "urn:guide:units";
Документ = Новый ДокументDOM(URI, "g:product");
Корень = Документ.ЭлементДокумента;
Корень.УстановитьСоответствиеПространстваИмен("g", URI);
Корень.УстановитьСоответствиеПространстваИмен("m", URIЕдиниц);
Корень.УстановитьАтрибут("code", "A-01");
Корень.УстановитьАтрибут("price", "250");
АтрибутЕдиницы = Документ.СоздатьАтрибут(URIЕдиниц, "m:unit");
АтрибутЕдиницы.Значение = "шт";
Корень.УстановитьУзелАтрибута(АтрибутЕдиницы);
Корень.ДобавитьДочерний(Документ.СоздатьТекстовыйУзел("Книга"));
Чтение = Новый ЧтениеУзловDOM;
Чтение.Открыть(Документ);
Попытка
    Чтение.ПерейтиКСодержимому();
    Значения = Новый Соответствие;
    ЕстьАтрибут = Чтение.ПервыйАтрибут();
    Пока ЕстьАтрибут Цикл
        Сообщить(Чтение.ТипУзла = ТипУзлаXML.Атрибут);
        Значения.Вставить(Чтение.Имя, Чтение.Значение);
        Сообщить("Из DTD по умолчанию: " + Строка(Чтение.ЭтоАтрибутПоУмолчанию));
        ЕстьАтрибут = Чтение.СледующийАтрибут();
    КонецЦикла;
    Сообщить(Значения.Получить("code") = "A-01");
    Сообщить(Значения.Получить("price") = "250");
    Если Не Чтение.Прочитать() Тогда
        ВызватьИсключение "Ожидался текст после атрибутов";
    КонецЕсли;
    Сообщить(Чтение.ТипУзла = ТипУзлаXML.Текст);
    Сообщить(Чтение.Значение = "Книга");
    Чтение.Закрыть();
    Чтение.Открыть(Документ);
    Чтение.ПерейтиКСодержимому();
    ВторыеЗначения = Новый Соответствие;
    Пока Чтение.ПрочитатьАтрибут() Цикл
        ВторыеЗначения.Вставить(Чтение.Имя, Чтение.Значение);
    КонецЦикла;
    Сообщить(ВторыеЗначения.Получить("code") = "A-01");
    Сообщить(ВторыеЗначения.Получить("m:unit") = "шт");
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();

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

  1. На начале product вызываем ПервыйАтрибут; успешный результат означает, что Имя/Значение уже описывают атрибут, а не элемент.

  2. СледующийАтрибут идёт по соседним атрибутам. Сохраняем значения в собственное соответствие по именам, не по позиции.

  3. После обхода Прочитать завершает чтение атрибутов и продолжает основной поток: на этом дереве следующим узлом будет текст Книга.

  4. Закрываем и снова открываем то же дерево. Новый проход использует только ПрочитатьАтрибут, без предварительного ПервыйАтрибут.

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

  1. Оба соответствия содержат code=A-01 и price=250; второе также m:unit=шт.

  2. После первого прохода узел Текст со значением Книга. Все логические проверки дают Истина.

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

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

Разобрана смена состояния чтения атрибутов и безопасный отдельный проход другим API.

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

  1. Не комбинируйте два последовательных обхода без повторного открытия или явного понимания текущего состояния.

  2. ЭтоАтрибутПоУмолчанию имеет смысл на атрибуте; отсутствие DTD не является проверкой достоверности данных.

  3. У реального XML между элементами могут быть дополнительные пробельные узлы, поэтому переход прямо на Книга относится к этому дереву без отступов.

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

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

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

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

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