Объект ЧтениеXML предназначен для чтения данных из XML-документа. Так же как при записи данных, чтение элемента производится узлами. Перечень узлов определен в системном перечислении ТипУзлаXML:
Какой узел получен при чтении следующего структурного элемента, можно узнать, обратившись к свойству ТипУзла объекта ЧтениеXML.
Будем исходить из того, что необходимо прочитать следующий XML-документ (полученный при выгрузке с помощью объекта ЗаписьXML) – листинг 6.47.
Листинг 6.47. Читаемый XML-документ
<?xml version="1.0" encoding="UTF-8"?>
<Корневой ИмяСправочника="Сотрудники">
<!--Выгрузка элементов справочника-->
<ЭлементСправочника>
<Код>000000001</Код>
<Наименование>Алексеев Сергей Иванович</Наименование>
<ДатаРождения>10.12.1980</ДатаРождения>
<КоличествоДетей>1</КоличествоДетей>
</ЭлементСправочника>
<ЭлементСправочника>
<Код>REST-0003</Код>
<Наименование>Артемов Игорь Владимирович</Наименование>
<ДатаРождения>17.05.2019</ДатаРождения>
<КоличествоДетей>2</КоличествоДетей>
</ЭлементСправочника>
<ЭлементСправочника>
<Код>000000002</Код>
<Наименование>Смирнова Светлана Ивановна</Наименование>
<ДатаРождения>22.02.1990</ДатаРождения>
<КоличествоДетей>0</КоличествоДетей>
</ЭлементСправочника>
</Корневой>
Пример использования объекта ЧтениеXML (листинг 6.48).
Листинг 6.48. Чтение XML-документа
&НаКлиенте
Процедура ЧтениеДанных(Команда)
Файл = Новый ЧтениеXML;
Файл.ОткрытьФайл("c:\temp\document.xml");
Сообщение = Новый СообщениеПользователю();
// Прочитать фрагменты элемента.
Пока Файл.Прочитать() Цикл
// Проверить тип узла.
Если Файл.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Сообщение.Текст = Файл.Имя;
Сообщение.Сообщить();
// Прочитать атрибуты.
Пока Файл.ПрочитатьАтрибут() Цикл
Сообщение.Текст = "атрибут:" + Файл.Имя + "=" + Файл.Значение;
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
Если Файл.ТипУзла = ТипУзлаXML.Текст Тогда
Сообщение.Текст = Файл.Значение;
Сообщение.Сообщить();
КонецЕсли;
Если Файл.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Сообщение.Текст = "/" + Файл.Имя;
Сообщение.Сообщить();
КонецЕсли;
КонецЦикла;
Файл.Закрыть();
КонецПроцедуры
Процесс чтения начинается с создания объекта ЧтениеXML. С помощью метода ОткрытьФайл() производится указание файла, из которого в дальнейшем будет производиться чтение данных.
Само чтение осуществляется с помощью метода Прочитать(). Данный метод возвращает значение Истина, в случае если получилось позиционироваться на следующем узле элемента XML. Для того чтобы понять, какой узел является текущим, производится обращение к свойству ТипУзла. В случае если это НачалоЭлемента, можно провести выборку атрибутов (они существуют только в контексте начала элемента).
После того как метод Прочитать() возвращает значение Ложь (достигнут конец документа), работа с XML-документом завершается вызовом метода Закрыть().
Порядок работы с объектом ЧтениеXML можно проиллюстрировать следующей схемой (рис. 6.7).
Рис. 6.7. Последовательность использования методов при чтении XML-документа
Общий принцип работы довольно прост. Открывается XML-документ, далее в цикле выполняется метод Прочитать(). После чтения анализируется тип полученного узла. В зависимости от типа предпринимаются некие специфические действия по извлечению данных. Если полученный узел является началом элемента, предпринимается попытка получить все атрибуты, которые могут быть в нем определены.