Профессия — 1С

Рукопашный бой Карташ

Категории

Работа с DOM

рубрики: XML | Дата: 12 Декабрь, 2015

Кроме всего прочего при работе с XML в 1С версии 8 есть возможность использовать DOM — Document Object Model (Объектная модель документа). Модель DOM имеет широкие возможности для работы с элементами и аттрибутами XML как в плане их чтения, так и изменения. В отличие от таких объектов как ЧтениеXML и ЗаписьXML, которые работают с файлом или строкой XML путем последовательного чтения или записи элементов и аттрибутов, объект ДокументDOM позволяет, например, получить выборку элементов XML по имени и далее обработать их в цикле.




Рассмотрим это на примере (код написан для платформы 8.2). Допустим у нас есть XML файл с выгруженными документами «ПриемНаРаботуВОрганизацию». Создать такой файл можно при помощи стандартной обработки «ВыгрузкаЗагрузкаДанныхXML.epf» с диска ИТС. Файл имеет следующий вид:


		<xml version="1.0" encoding="UTF-8"?>
		<V8Exch:_1CV8DtUD xmlns:V8Exch="http://www.1c.ru/V8/1CV8DtUD/" xmlns:v8="http://v8.1c.ru/data" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
			<V8Exch:Data>
				<DocumentObject.ПриемНаРаботуВОрганизацию>
					<Ref>17dc486c-3d0b-11e2-82dc-000c29a93e6f</Ref>
					.................................................
					.................................................
				</DocumentObject.ПриемНаРаботуВОрганизацию>
				<DocumentObject.ПриемНаРаботуВОрганизацию>
					<Ref>2df962d4-3e9c-11e2-82dc-000c29a93e6f</Ref>
					.................................................
					.................................................
				</DocumentObject.ПриемНаРаботуВОрганизацию>
			</V8Exch:Data>
		</V8Exch:_1CV8DtUD>	
	

Читать будем узлы <DocumentObject.ПриемНаРаботуВОрганизацию>




Создать объект ДокументDOM можно при помощи объекта ПостроительDOM



	л_ЧтениеХМЛ	= Новый ЧтениеXML; 
	л_ЧтениеХМЛ.ОткрытьФайл("D:\musor\test.xml"); 

	л_ПостроительДОМ     = Новый ПостроительDOM; 
	л_ДОМДокумент        = л_ПостроительДОМ.Прочитать(л_ЧтениеХМЛ); 
	

А теперь выберем узлы <DocumentObject.ПриемНаРаботуВОрганизацию> и обойдем их в цикле



	л_СписокУзловДокумент = л_ДОМДокумент.ПолучитьЭлементыПоИмени("DocumentObject.ПриемНаРаботуВОрганизацию"); 
	Для каждого л_УзелДокумент Из л_СписокУзловДокумент Цикл 

	КонецЦикла;
	

И в итоге доработаем наш код таким образом, чтобы после чтения мы смогли записать прочитанные документы в базу 1С:



	л_ЧтениеХМЛ = Новый ЧтениеXML; 
	л_ЗаписьХМЛ = Новый ЗаписьXML; 
	л_ЗаписьДОМ = Новый ЗаписьDOM; 
	
	л_ЧтениеХМЛ.ОткрытьФайл("D:\musor\test.xml"); 
	
	л_ПостроительДОМ = Новый ПостроительDOM; 
	л_ДОМДокумент = л_ПостроительДОМ.Прочитать(л_ЧтениеХМЛ); 
	
	л_СписокУзловДокумент = л_ДОМДокумент.ПолучитьЭлементыПоИмени("DocumentObject.ПриемНаРаботуВОрганизацию"); 
	Для каждого л_УзелДокумент Из л_СписокУзловДокумент Цикл 
	
		л_ЗаписьХМЛ.УстановитьСтроку(); 
		л_ЗаписьДОМ.Записать(л_УзелДокумент, л_ЗаписьХМЛ); 
		л_СтрокаХМЛ = л_ЗаписьХМЛ.Закрыть(); 
		
		л_ЧтениеХМЛ.УстановитьСтроку(л_СтрокаХМЛ); 
		л_ДокументОбъект = ПрочитатьXML(л_ЧтениеХМЛ); 
		л_ДокументОбъект.Записать(); 
	
	КонецЦикла;
	

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С