---
title: Чтение XML
slug: общие-обмен-данными-чтение-данных-из-файла/чтение-xml
---

## С помощью XDTO

```bsl

&НаКлиенте
Асинх Процедура ПрочитатьФайл(Команда)
    
    Расширение = "xml";

    ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
    ПараметрыДиалога.Заголовок = "Выберите файл";
    ПараметрыДиалога.Фильтр = ФильтрПоРасширению(Расширение);
    
    ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ПараметрыДиалога);
    Если ОписаниеФайла = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    АдресДанных = ОписаниеФайла.Адрес;

    Расширение = ОписаниеФайла.СсылкаНаФайл.Файл.Расширение;

    ПрочитатьФайлНаСервере(АдресДанных, Расширение);

КонецПроцедуры


&НаСервере
Процедура ПрочитатьФайлНаСервере(АдресДанных, Расширение)

    ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанных);
    ПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение);
    ДанныеФайла.Записать(ПутьКФайлу);
    
    СоответствиеПолей = Новый Соответствие;
    СоответствиеПолей.Вставить("name",			"Наименование");
    СоответствиеПолей.Вставить("fullname",		"НаименованиеПолное");
    СоответствиеПолей.Вставить("partner_type",	"ВидКонтрагента");
    СоответствиеПолей.Вставить("inn",			"ИНН");
    СоответствиеПолей.Вставить("kpp",			"КПП");
    СоответствиеПолей.Вставить("phone",			"Телефон");
    СоответствиеПолей.Вставить("email",			"ЭлектроннаяПочта");
    СоответствиеПолей.Вставить("is_customer",	"Покупатель");
    СоответствиеПолей.Вставить("is_supplier",	"Поставщик");

    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
    
    ДанныеXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
    
    // Если элемент в коллекции один, то тип будет "ОбъектXDTO", который в цикле не обойти
    // Создаем в таком случае принудительно массив
    Если ТипЗнч(ДанныеXDTO.Partner) = Тип("ОбъектXDTO") Тогда
        МассивКонтрагентовXDTO = Новый Массив;		
        МассивКонтрагентовXDTO.Добавить(ДанныеXDTO.Partner);
    Иначе                     
        МассивКонтрагентовXDTO = ДанныеXDTO.Partner;
    КонецЕсли;
    
    Для каждого ОбъектXDTO Из МассивКонтрагентовXDTO Цикл
        
        НоваяСтрока = Объект.ДанныеФайла.Добавить();
        СвойстваXDTO = ОбъектXDTO.Свойства();
        
        Для каждого СвойствоXDTO Из СвойстваXDTO Цикл
            
            ИмяСвойства = СвойствоXDTO.Имя;
            
            Если ТипЗнч(ОбъектXDTO[ИмяСвойства]) = Тип("ОбъектXDTO") Тогда
                Продолжить;
            КонецЕсли;
            
            ИмяРеквизита = СоответствиеПолей.Получить(ИмяСвойства);
            Если ИмяРеквизита <> Неопределено Тогда
                НоваяСтрока[ИмяРеквизита] = ОбъектXDTO[ИмяСвойства];			
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЦикла;
    
    ЧтениеXML.Закрыть();
    
    УдалитьФайлы(ПутьКФайлу);

КонецПроцедуры 
```