наверх
Свободные IT публикации
быстро и доступно
логин:
пароль:

Работа с XML в 1С 8.x


Как из одной базы перенести документ в другую базу?

// Выгрузить в файл xml. 
ЗаписьXML=Новый ЗаписьXML(); 
ЗаписьXML.ОткрытьФайл("c:\doc.xml"); 
ЗаписьXML.ЗаписатьНачалоЭлемента("Root"); 

// Получить объект по ссылке. 
ВыгружаемыйОбъект=Документ.ПолучитьОбъект(); 

// С помощью средств сериализации записать объект в файл. 
ЗаписатьXML(ЗаписьXML,ВыгружаемыйОбъект); 

ЗаписьXML.ЗаписатьКонецЭлемента(); 
ЗаписьXML.Закрыть(); 



ЧтениеXML=Новый ЧтениеXML(); 
ЧтениеXML.ОткрытьФайл("c:\doc.xml"); 

// Текущим становится элемент Root. 
ЧтениеXML.Прочитать(); 

// Текущим становится элемент с документом. 
ЧтениеXML.Прочитать(); 

// Проверить сможет ли с данным значением "справиться" 
// система сериализации в данной базе. 
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда 
	// Получить ДокументОбъект.РеализацияТоваровУслуг 
	ЗагружаемыйОбъект=ПрочитатьXML(ЧтениеXML); 
	ЗагружаемыйОбъект.Записать(); 
КонецЕсли; 

ЧтениеXML.Закрыть();

Как можно сформировать XML-документ произвольной структуры?

Запись = Новый ЗаписьXML; 
Запись.ОткрытьФайл(ПутьКФайлу); 
Запись.ЗаписатьОбъявлениеXML(); 
Запись.ЗаписатьНачалоЭлемента("Корневой"); 
Запись.ЗаписатьАтрибут("Справочник", "Номенклатура"); 
Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре"); 

Выборка = Справочники.Номенклатура.ВыбратьИерархически(); 

Пока Выборка.Следующий() Цикл 
	Если Выборка.ЭтоГруппа Тогда 
		Продолжить; 
	КонецЕсли; 

	Запись.ЗаписатьНачалоЭлемента("Элемент"); 
	Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код)); 
	Запись.ЗаписатьАтрибут("Артикул", Строка(Выборка.Артикул)); 
	Запись.ЗаписатьТекст(Выборка.Наименование); 
	Запись.ЗаписатьКонецЭлемента(); 
КонецЦикла; 

Запись.ЗаписатьКонецЭлемента(); 
Запись.Закрыть();

Как сформировать XML-документ в строку?

Запись = Новый ЗаписьXML(); 
Запись.УстановитьСтроку(); 
Запись.ЗаписатьОбъявлениеXML(); 
Запись.ЗаписатьНачалоЭлемента("Корневой"); 
Запись.ЗаписатьАтрибут("Справочник", "Номенклатура"); 
Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре"); 

Выборка = Справочники.Номенклатура.ВыбратьИерархически(); 

Пока Выборка.Следующий() Цикл 
	Если Выборка.ЭтоГруппа Тогда 
		Продолжить; 
	КонецЕсли; 

	Запись.ЗаписатьНачалоЭлемента("Элемент"); 
	Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код)); 
	Запись.ЗаписатьАтрибут("Артикул", Строка(Выборка.Артикул)); 
	Запись.ЗаписатьТекст(Выборка.Наименование); 
	Запись.ЗаписатьКонецЭлемента(); 
КонецЦикла; 

Запись.ЗаписатьКонецЭлемента(); 
Стр = Запись.Закрыть(); 
Сообщить(Стр);

Как можно обмениваться данными, используя XML-сериализацию через файлы других форматов?

ЗаписьXML = Новый ЗаписьXML(); 
ЗаписьXML.УстановитьСтроку(); 
Данные = СсылкаНаДокумент.ПолучитьОбъект(); 
ЗаписатьXML(ЗаписьXML, Данные); 
ТекстСообщения = ЗаписьXML.Закрыть(); 

Текст = Новый ТекстовыйДокумент; 
Текст.УстановитьТекст(ТекстСообщения); 
Текст.Записать(ПутьКФайлу); 

Текст = Новый ТекстовыйДокумент; 
Текст.Прочитать(ПутьКФайлу); 

ЧтениеXML = Новый ЧтениеXML(); 
ЧтениеXML.УстановитьСтроку(Текст.ПолучитьТекст()); 

Если ВозможностьЧтенияXML(ЧтениеXML) Тогда 
	Данные = ПрочитатьXML(ЧтениеXML); 	
	Данные.Записать(); 
КонецЕсли;

Как можно загрузить XML документ произвольной структуры?

Чтение = Новый ЧтениеXML; 
Чтение.ОткрытьФайл(ПутьКФайлу); 

Пока Чтение.Прочитать() Цикл 

	// Прочитать "структурные части" элементов. 
	// Проверить, какая часть элемента - текущая. 
	Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда 
		ИмяУзла = Чтение.Имя; Сообщить("--" + ИмяУзла); 

		// Атрибуты элементов можно читать только если текущая часть - 
		// начало элемента 
		Пока Чтение.ПрочитатьАтрибут() Цикл 

			// Прочитать данные узла атрибута. 
			ТипУзла = Чтение.ТипУзла; 
			Имя = Чтение.Имя; 
			Значение = Чтение.Значение; 

			// Обработать полученные значения.

		КонецЦикла;

	ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда 

		// В примере просто выводим текст в окно сообщений. 
		Сообщить("Текст:" + Чтение.Значение); 

	ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда 

		// В примере просто выводим признак конца элемента 
		// в окно сообщений Сообщить("--Конец:" + Чтение.Имя); 

	КонецЕсли; 

КонецЦикла;