Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Запись данных в XML-документ
Дальше: XML-сериализация

Чтение данных из XML-документа

Объект Чтение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-документ, далее в цикле выполняется метод Прочитать(). После чтения анализируется тип полученного узла. В зависимости от типа предпринимаются некие специфические действия по извлечению данных. Если полученный узел является началом элемента, предпринимается попытка получить все атрибуты, которые могут быть в нем определены.

Назад: Запись данных в XML-документ
Дальше: XML-сериализация