06.06.2017

Выгрузка и загрузка XML через DOM

Выгрузка в XML средствами DOM

   Для примера рассмотрим произвольную выгрузку справочника "Номенклатура" в XML файл средствами объектов DOM
	ИмяПространства = "http://v8.1c.ru/8.1/data/enterprise/current-config";
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл("D:\dom.xml");
	
	ЗаписьDOM	= Новый ЗаписьDOM;

	// Формируем корневой узел. В XML файле обязательно наличие корневого узла
	ДокументDOM	= Новый ДокументDOM(ИмяПространства, "RootNode");

	КорневойDOM	= ДокументDOM.ЭлементДокумента;

	Выборка	= Справочники.Номенклатура.Выбрать();
	// В нашем примере выгружаем данные по справочнику «Номенклатура»
	Пока Выборка.Следующий() Цикл
		// Выгружаем только элементы, группы пропускаем
		Если Выборка.ЭтоГруппа Тогда 
			Продолжить;
		КонецЕсли;
		
		ЭлементDOM	= ДокументDOM.СоздатьЭлемент("ЭлементНоменклатуры");
		ЭлементDOM.ТекстовоеСодержимое	= XMLСтрока(Выборка.Ссылка);
		ЭлементDOM.УстановитьАтрибут("Код",			Выборка.Код);
		ЭлементDOM.УстановитьАтрибут("Наименование",Выборка.Наименование);
		ЭлементDOM.УстановитьАтрибут("Услуга",		XMLСтрока(Выборка.Услуга));
		ЭлементDOM.УстановитьАтрибут("ЕдиницаИзмерения",	XMLСтрока(Выборка.ЕдиницаИзмерения));
		
		КорневойDOM.ДобавитьДочерний(ЭлементDOM);
	КонецЦикла;
	// Сохраняем полученное в XML файл
	ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
	// Важно всегда закрывать файл записи
	ЗаписьXML.Закрыть();
   ВАЖНО! В XML файле обязательно наличие корневого узла, в нашем случае это «RootNode». Т.е. сначала мы добавили корневой узел
	ДокументDOM	= Новый ДокументDOM(ИмяПространства, "RootNode");
   и затем записываем данные по объектам выгрузки.

   ВАЖНО!Закрывать XML файл после записи
	ЗаписьXML.Закрыть();

Загрузка из XML средствами DOM

   Теперь немного о том, как загрузить данные из XML файла средствами DOM
	ЧтениеXML	= Новый ЧтениеXML;
	ЧтениеXML.ОткрытьФайл("D:\dom.xml");
	
	ПостроительDOM	= Новый ПостроительDOM;
	
	ДокументDOM	= ПостроительDOM.Прочитать(ЧтениеXML);
	Корневой	= ДокументDOM.ЭлементДокумента;
	Дочерние	= Корневой.ДочерниеУзлы;
	
	Для ИндексУзла = 0 По Дочерние.Количество() - 1 Цикл 
		
		ЭлементDOM	= Дочерние.Элемент(ИндексУзла);
		
		Если ЭлементDOM.ТипУзла = ТипУзлаDOM.Элемент Тогда 
			
			ИмяЭлемента		= ЭлементDOM.ИмяЭлемента;
			ТекстЭлемента	= XMLЗначение(Тип("СправочникСсылка.Номенклатура"), 
						ЭлементDOM.ТекстовоеСодержимое);
			
			Сообщить(ИмяЭлемента + ": " + ТекстЭлемента);
			
		КонецЕсли;
		
		Для Каждого ТекущийАтрибут Из ЭлементDOM.Атрибуты Цикл 
			
			Если ТекущийАтрибут.Имя = "ЕдиницаИзмерения" Тогда 
				Сообщить("Единица: " +
					XMLЗначение(Тип("СправочникСсылка.ЕдиницыИзмерения"), ТекущийАтрибут.Значение));

				Продолжить;
			КонецЕсли;
			
			Сообщить(ТекущийАтрибут.Имя + ": " + ТекущийАтрибут.Значение);
			
		КонецЦикла;
		
	КонецЦикла;
	// И так же важно всегда закрывать файл чтения
	ЧтениеXML.Закрыть();

Заключение

   В заключении можно отметить удобство использования объектов DOM для выгрузки и загрузки XML. Например при чтении XML мы получаем сразу всю коллекцию узлов с которой можем работать, а не считываем построчно как при традиционном методе (когда данные получаются построчно, и при переходе ко второй строке файла, данные о первой строке теряются если их не сохранить в переменных).
   Можно сделать вывод, что DOM это прородитель XDTO (например так же, как построитель отчетов можно считать прородителем СКД)



Другие статьи

Функция вычисления контрольной цифры для штрихкода EAN-13 (EAN-8)

    Рабочая функция для вычисления контрольной цифры в штрихкоде формата EAN-13 или EAN-8

Чтение текстового файла в 1С

    Пример чтения данных текстового файла (на клиенте и сервере) при разработке в режиме управляемого приложения 1С

Чтение (Загрузка) данных из MXL в 1С 8.3

    Рабочий пример обработки чтения (загрузки) данных из MXL файла, с учетом отказа от использования модальных вызовов

Открыть форму выбора 1С 8.3

    Пример кода для открытия окна выбора элемента справочника, без использования модальных вызовов

Чтение и загрузка DBF в 1С 8.3

    Пример программного кода для чтения и/или записи файлов в формате DBF

Выгрузка объекта «1С» в XML и загрузка объекта из XML файла

    Пример выгрузки объекта информационной базы (СправочникОбъект, ДокументОбъект) «1С» в XML файл, и пример обратной загрузки объекта из XML файла

HTTP запрос в 1С средствами «WinHttpRequest»

    Пример реализации HTTP запроса в 1С, средствами «WinHttpRequest» 

Программное изменение расписания фонового задания 1С 8.3

   Пример программного кода, для редактирования расписания выполнения фонового задания в 1С 8.3 в режиме отказа использования модальных вызовов

Оформление строк табличной части 1С 8.3

    Пример условного оформления элементов формы, в частности строк табличной части в 1С 8.3 (управляемые формы)

Обработка заполнения табличной части в 1С 8.3

    В статье рассматривается разработка обработки заполнения табличной части на примере конфигурации 1С:ERP
 

Запрос к таблице значений 1С 8.3

    В статье описан простой пример того, как можно сформировать запрос 1С к данным таблицы значений, т.е. как передать таблицу значений в параметр запроса
 

Динамическое создание колонок в таблице на форме 1С (Обычное приложение)

     Практический пример того, каким образом в таблице на форме (в режиме обычного приложения 1С), можно динамически создавать необходимое количество колонок, с возможностью установки обработки событий (например "ПриИзменении" в ячейке таблицы)

Динамическое создание колонок в таблице на форме 1С 8.3

      Практический пример того, каким образом в управляемом интерфейсе можно создавать и удалять колонки в таблице значений на форме

Чтение (загрузка) данных в 1С 8.3 из Excel

     Для передачи различной информации очень часто применяются табличные документы Excel. Переносить руками информацию из такого файла можно, но не удобно. Поэтому давайте рассмотрим, как можно программно в 1С обработать такой документ

Сохранение и восстановление настроек 1С 8.3

    Пример работы с хранилищем настроек 1C, для программного сохранения и получения сохраненных настроек

Внешняя печатная форма 1С 8.3

      Изменения в печатных формах, как и разработка новых, одна из самых распространенных задач. И для этих целей предназначен механизм внешних печатных форм, используемый в конфигурациях 1С.

Определение даты создания ссылки в 1С

Определяем дату создания ссылки по уникальному идентификатору объекта 1С

Программное создание команды и кнопки на форме 1С 8.3

Небольшой пример того, как программно создавать команды и элементы управления на управляемых формах 1С

Открыть форму созданного объекта (Справочник, документ в 1С 8.2, 8.3)

Создаем новый объект, НЕ записываем его в базу, и открываем форму