Получает значение атрибута.
Синтаксис
ЗначениеАтрибута(<НомерАтрибута>)ЗначениеАтрибута(<ПолноеИмяАтрибута>)ЗначениеАтрибута(<ЛокальноеИмяАтрибута>, <URIПространстваИмен>)Примеры платформы
Чтение.ОткрытьФайл(ИмяФайла);
Попытка
ИдГруппы = Чтение.ЗначениеАтрибута("ИдГруппы");
Исключение
КонецПопытки;Полное описание, параметры и ограничения
ЧтениеУзловDOM.ЗначениеАтрибута (DOMNodeReader.AttributeValue)
ЧтениеУзловDOM (DOMNodeReader)
ЗначениеАтрибута (AttributeValue)
Доступен, начиная с версии 8.2.
Вариант синтаксиса: По номеру
Синтаксис:
ЗначениеАтрибута(<НомерАтрибута>)
Параметры:
<НомерАтрибута> (обязательный)
Тип: Число.
Порядковый номер атрибута, начиная с 0.
Вариант синтаксиса: По полному имени
Синтаксис:
ЗначениеАтрибута(<ПолноеИмяАтрибута>)
Параметры:
<ПолноеИмяАтрибута> (обязательный)
Тип: Строка.
Полное имя атрибута, включающее префикс.
Вариант синтаксиса: По локальному имени и пространству имен
Синтаксис:
ЗначениеАтрибута(<ЛокальноеИмяАтрибута>, <URIПространстваИмен>)
Параметры:
<ЛокальноеИмяАтрибута> (обязательный)
Тип: Строка.
Локальное имя атрибута, не включая префикс.
<URIПространстваИмен> (обязательный)
Тип: Строка.
URI пространства имен для локального имени атрибута.
Возвращаемое значение:
Тип: Строка, Неопределено.
Если атрибут найден, то метод возвращает строку, представляющую значение атрибута. Если атрибут в соответствии с заданными параметрами не найден, то метод возвращает значение Неопределено.
Описание:
Получает значение атрибута.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Чтение.ОткрытьФайл(ИмяФайла);
Попытка
ИдГруппы = Чтение.ЗначениеАтрибута("ИдГруппы");
Исключение
КонецПопытки;
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Прочитать XML-атрибуты по имени и построить диагностическую таблицу
Индексы начинаются с нуля, но порядок атрибутов не является бизнес-контрактом. Для загрузки code/price/unit используем имена и URI.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Документы и все узлы создаются в памяти на сервере. Внешние XML, DTD, сетевые схемы и файлы не загружаются.
Сначала оставьте учебные имена и значения неизменёнными. После контрольного запуска меняйте по одному условию.
В этом блоке каждый пример создаёт собственное дерево DOM в памяти. Файлы, сеть, данные документов и справочников не используются.
Открыть у ЧтениеУзлов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.НачалоЭлемента Тогда
ВызватьИсключение "Ожидался собственный корневой элемент";
КонецЕсли;
Сообщить(Чтение.Имя = "g:product");
Сообщить(Чтение.ЛокальноеИмя = "product");
Сообщить(Чтение.Префикс = "g");
Сообщить(Чтение.URIПространстваИмен = URI);
Сообщить(Чтение.ЗначениеАтрибута("code") = "A-01");
Сообщить(Чтение.ПолучитьАтрибут("price") = "250");
Сообщить(Чтение.ЗначениеАтрибута("unit", URIЕдиниц) = "шт");
Сообщить(Чтение.ПолучитьАтрибут("missing") = Неопределено);
Диагностика = Новый ТаблицаЗначений;
Диагностика.Колонки.Добавить("ПолноеИмя");
Диагностика.Колонки.Добавить("ЛокальноеИмя");
Диагностика.Колонки.Добавить("Префикс");
Диагностика.Колонки.Добавить("URI");
Диагностика.Колонки.Добавить("ТипАтрибута");
Диагностика.Колонки.Добавить("Значение");
Для Индекс = 0 По Чтение.КоличествоАтрибутов() - 1 Цикл
СтрокаАтрибута = Диагностика.Добавить();
СтрокаАтрибута.ПолноеИмя = Чтение.ИмяАтрибута(Индекс);
СтрокаАтрибута.ЛокальноеИмя = Чтение.ЛокальноеИмяАтрибута(Индекс);
СтрокаАтрибута.Префикс = Чтение.ПрефиксАтрибута(Строка(Индекс));
СтрокаАтрибута.URI = Чтение.URIПространстваИменАтрибута(Индекс);
СтрокаАтрибута.ТипАтрибута = Чтение.ТипАтрибута(Индекс);
СтрокаАтрибута.Значение = Чтение.ЗначениеАтрибута(Индекс);
Сообщить(СтрокаАтрибута.ПолноеИмя + " = " + СтрокаАтрибута.Значение);
КонецЦикла;
Сообщить(Диагностика.Количество() = Чтение.КоличествоАтрибутов());
Сообщить(Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента);
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Разбор по шагам
ПерейтиКСодержимому ставит чтение на начало product; только после этого обращаемся к его атрибутам.
Именованные варианты отличают отсутствие атрибута (Неопределено) от пустого значения существующего атрибута.
Для диагностики обходятся все индексы. В поле ПрефиксАтрибута индекс передаём строкой согласно сигнатуре локальной справки 8.5; остальные индексные методы принимают число.
Индексные методы и ПолучитьАтрибут/ЗначениеАтрибута читают данные без перехода на атрибут. В конце текущий узел всё ещё НачалоЭлемента.
Как проверить результат
Десять логических проверок дают Истина.
Диагностика содержит code=A-01, price=250, m:unit=шт. Не требуйте конкретного порядка строк; определения пространств имён рассматривайте отдельно от бизнес-атрибутов.
price возвращается строкой 250, не числом: преобразование числа и валидация внешнего ввода — отдельная задача.
Ожидаемый результат
Атрибуты извлечены без изменения позиции и без предположений об их порядке.
На что обратить внимание
Сначала проверяйте тип узла. Доступ к атрибутам текста или конца элемента не является чтением атрибутов предыдущего товара.
Не ищите unit только по буквам m:unit, если префикс может измениться: используйте локальное имя и URI.
Для недоверенных XML проверяйте обязательность, формат, длину и допустимость каждого бизнес-значения.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.